2013-08-29 4 views
5

私の活動では、私はタイマーとメディアプレーヤーを使ってオーディオを再生しています。私のアプリは、オーディオ再生モードの選択のためのアクティビティ 'B'を言う設定アクティビティを持っています。 startActivityForResult()を使用していて、アクティビティBからresultCodeを送信しています。問題は、アクティビティBが終了するのに時間がかかりすぎるということです。 Bが完全に終了する前に、Aの音声が開始される。これをどう扱うか???アクティビティが遅すぎる

私の活動のBのcalligコードは次のとおりです。

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

と私の活動のBは、コードは次の通りです:アクティビティAで

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(); 
    } 
} 

OnActivityResultは次のとおりです。

@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; 
      } 
     } 
    } 

答えて

0

それは意志、 UIスレッドでビットマップ処理を行っているので、この種のスレッドを別のスレッドで使用する必要があります。 f仕事、read Displaying Bitmaps Efficiently

+0

しかし、私はビットマップ関連の処理を持たない別の2つのアクティビティを持っていますが、それでも同じ問題が発生しています。 –