2

シンプルな Android ゲーム アプリを開発しています。主なアクティビティ (以前はプレイしていたアクティビティ) で、状態が確認されたとき、1/2 秒後に現在のアクティビティを停止して再開したいと考えています。ゲームは時々うまく動作しますが、多くの場合、ランダムに、「エラーなしで」クラッシュします [アクティビティを再起動しませんが、ゲーム メニュー アクティビティ (メニュー、オプションなどに使用されるアクティビティ) に戻るビューを閉じます.. .)].

問題が発生したときのコードは次のとおりです。

if(scoreManager.isEndGame()){
                    final Handler mHandler = new Handler();
                    Runnable mUpdateTimeTask = new Runnable() {
                        public void run() {
                            long remainingTime = scoreManager.getSecondsUntilFinished();
                            scoreManager.setRemainingTime(remainingTime*1000);
                            finish();
                            startActivity(getIntent());
                        }

                    };
                    mHandler.postDelayed(mUpdateTimeTask, 500);
                }

scoreManagerには、再起動するたびに、remainingTime でインスタンス化される CountDownTimer が含まれています (onCreate() でインスタンス化されます)。

LogCatで私は読んだ:

InputMethodManagerService : pid 18494 uid 10062 に setActive(false) 通知を送信する RemoteException を取得しました

I/ActivityManager : 表示 com.myproject.activities/.MenuActivity: +774ms (合計 +3s697ms)

基本的に、アクティビティが破棄され、再開されないことがよくあります。例外はスローされません。「HTC Desire」でこの問題をテストしています。

助けてください。

4

1 に答える 1

1

解決しました!!!

最後に、問題を発見しました。それは、メイン アクティビティの「onCreate」メソッドにありました。背景画像をランダムに設定しようとすると、選択した画像の解像度が 1024x768 以上 (R.drawable.background_3 および R.drawable.background_5) と大きすぎることがあり、このためメイン アクティビティが中断され、MenuActivity に返されました。すべての背景画像の解像度を 640x480 に設定することを解決しました。

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try{
       //stuff...

       //set background
       LinearLayout linLay = (LinearLayout) findViewById(R.id.mainLayout);
      linLay.setBackgroundResource(getBackgroundCode(new Random().nextInt(12)));

       //other stuff...
    }catch(Exception e){
        Log.e("MainPlayActivity", "onCreate() - Error during cretion. Exception: "+e.getMessage(), e);
    }
}



private int getBackgroundCode(int n){

    int result=0;

    switch (n){
    case 0:
        result = R.drawable.background_0;
        break;
    case 1:
        result = R.drawable.background_1;
        break;
    case 2: 
        result = R.drawable.background_2;
        break;
    case 3: 
        result = R.drawable.background_3;
        break;
    case 4: 
        result = R.drawable.background_4;
        break;
    case 5: 
        result = R.drawable.background_5;
        break;
    case 6: 
        result = R.drawable.background_6;
        break;
    case 7: 
        result = R.drawable.background_7;
        break;
    case 8: 
        result = R.drawable.background_8;
        break;
    case 9: 
        result = R.drawable.background_9;
        break;
    case 10: 
        result = R.drawable.background_10;
        break;
    case 11: 
        result = R.drawable.background_11;
        break;
    default :
        result = R.drawable.background_0;
    }
    return result;
}
于 2013-03-28T00:40:55.823 に答える