我正在开发一款简单的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,在每次重新启动时都会使用remainingTime(在onCreate()上实例化)。
在LogCat上我读到:
InputMethodManagerService:发送了RemoteException setActive(false)通知pid 18494 uid 10062
I / ActivityManager:显示com.myproject.activities / .MenuActivity: + 774毫秒(总计+ 3s697毫秒)
基本上,活动经常被破坏而且没有重新启动。 没有异常被抛出。我在“HTC Desire”上测试了这个问题。
请帮忙。
答案 0 :(得分: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;
}