2013-08-29 14 views
5

In meiner Aktivität 'A' verwende ich Timer und Media Player, um Audio abzuspielen. Meine App verfügt über eine Aktivität zum Festlegen der Aktivität "B" für die Auswahl der Audiowiedergabemodi. Ich verwende startActivityForResult() und sendet einen resultCode von Aktivität B. Problem ist, dass Aktivität B zu viel Zeit braucht, um zu beenden. wie das Audio in A beginnt, bevor das B vollständig beendet ist. Wie geht man damit um ???Aktivität wird zu langsam beendet

meine Tätigkeit B Callig Code ist:

Intent intent = new Intent(context, Setting.class); 
     startActivityForResult(intent, Cover.SETTING_REQ); 

und meine Aktivität B-Code hat folgende:

public class Setting extends Activity { 
    Context context; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settings); 
     context = this; 
     final RelativeLayout layout = (RelativeLayout) findViewById(R.id.setting_layout); 
     Display display = getWindowManager().getDefaultDisplay(); 
     final int width = display.getWidth(); 
     final int height = display.getHeight(); 
     int[] modes = { R.drawable.settingspageiphone, R.drawable.readtome, 
       R.drawable.readwithpause, R.drawable.icanreadit }; 
     Bitmap bm = BitmapLib.prepairBitmap(context, modes[Read.mode], width, 
       height); 
     layout.setBackgroundDrawable(new BitmapDrawable(bm)); 
     layout.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       // TODO Auto-generated method stub 
       double x = event.getX(); 
       double y = event.getY(); 
       double H = layout.getHeight(); 
       double W = layout.getWidth(); 
       if (H * 320 > W * 480) { 
        H = W * 480/320; 
        y = y - (layout.getHeight() - H)/2; 
       } else { 
        W = H * 320/480; 
        x = x - (layout.getWidth() - W)/2; 
       } 
       x = x/W * 320; 
       y = y/H * 480; 
       if (x > 50 && x < 270) { 
        if (y > 150 && y < 190) { 
         // read to me 
         Bitmap bm = BitmapLib.prepairBitmap(context, 
           R.drawable.readtome, width, height); 
         layout.setBackgroundDrawable(new BitmapDrawable(bm)); 
         Read.mode=1; 
         setResult(1); 
         finish(); 
         return false; 
        } 
        if (y > 230 && y < 270) { 
         // read with pause 
         Bitmap bm = BitmapLib.prepairBitmap(context, 
           R.drawable.readwithpause, width, height); 
         layout.setBackgroundDrawable(new BitmapDrawable(bm)); 
         Read.mode=2; 
         setResult(2); 
         finish(); 
         return false; 
        } 
        if (y > 320 && y < 360) { 
         // i can read it 
         Bitmap bm = BitmapLib.prepairBitmap(context, 
           R.drawable.icanreadit, width, height); 
         layout.setBackgroundDrawable(new BitmapDrawable(bm)); 
         Read.mode=3; 
         setResult(3); 
         finish(); 
         return false; 
        } 
        /*if (y > 430 && y < 470) { 
         setResult(-1); 
         finish(); 
         return false; 
        }*/ 
       } 
       return false; 
      } 
     }); 
    } 

    public void cancle(View v) 
    { 
     setResult(-1); 
     finish(); 
    } 
} 

und OnActivityResult in Aktivität A:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == Cover.SETTING_REQ) { 
      if (resultCode != -1) { 
       Cover.MODE = resultCode; 
       update = true; 
      } 
     } 
    } 

Antwort

0

Es wird, Da Sie die Bitmap-Verarbeitung im UI-Thread durchführen, sollten Sie für diese Art einen anderen Thread verwenden. o f Arbeit, lesen Displaying Bitmaps Efficiently

+0

Aber ich habe auch noch zwei andere Aktivitäten, die keine Bitmap-Verarbeitung hat, aber ich bekomme immer noch das gleiche Problem auf sie. –