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包含一个 CountDownTimer,它在每次重新启动时用剩余时间进行实例化(它在 onCreate() 上实例化)。

在 LogCat 上,我读到:

InputMethodManagerService:得到 RemoteException 向 pid 18494 uid 10062 发送 setActive(false) 通知

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 回答