我得到这个错误。 msg:“泄漏了最初添加的窗口”。 我有这段代码:
ball.java:
...
if(current_ball.physx.position.distance2(renderer.gPlayer.physx.position) <= (graphics.SQUARE_SIZE-4)*2)
{
if(renderer.gSnd_GameOver!=0 && renderer.bUseSound) renderer.gSndPool.play(renderer.gSnd_GameOver, 1, 1, 0, 0, 1);
renderer.bIsGameOver = true;
Message msg = new Message();
msg.what = newgame.STATE_GAMEOVER;
newgame.handler.sendMessage(msg);
return;
}
下, 在newgame.java ACTIVITY我有:
static DialogInterface.OnClickListener dialogClickListener = new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
Intent intent = null;
switch (which){
case DialogInterface.BUTTON_POSITIVE:
dialog.dismiss();
((Activity) newgame.gNewGameContext).finish();
intent = new Intent ( newgame.gNewGameContext , newgame.class );
newgame.gNewGameContext.startActivity( intent );
Log.d("redwing", "YES button ... successfuly processed, new intent starded.");
break;
case DialogInterface.BUTTON_NEGATIVE:
dialog.dismiss();
((Activity) newgame.gNewGameContext).finish();
Log.d("redwing", "NO button ... successfuly processed, current intent was closed.");
break;
}
}
这个HANDLER在GameOver(在上面的代码中提到的ball.java中生成消息)时收到消息...并用这个问题“PlayAgain?”实例化一个新的警告对话框。 (请注意,这个HANDLER存在并且它是在newgame.java中创建的):
public static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what)
{
case newgame.STATE_GAMEOVER:
AlertDialog.Builder builder = new AlertDialog.Builder(newgame.gNewGameContext);
builder.setCancelable(false);
builder.setTitle("GaMeOvEr");
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage("Play again ?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No" , dialogClickListener).show();
break;
}
}
};
...还在newgame.java中设置了“newgame.gNewGameContext”(在onCreate中):
@Override
protected void onCreate(Bundle newgameInstance) {
// TODO Auto-generated method stub
super.onCreate(newgameInstance);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN );
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
gNewGameContext = this;
......
要查看,我这样做:
当gameover = true时,我向处理程序发送消息。
处理程序收到gameover消息。并实例化一个新的警告框
如果用户按下此警告框中的“否”按钮,则会显示“已泄露窗口” 最初在这里添加“错误!:(
请帮助,我不知道如何解决这个问题。 谢谢!
答案 0 :(得分:2)
这可能是因为你试图在关闭对话框之前完成创建Dialog的活动。显然,因为你的对话框没有引用实际创建它的活动,这个问题出现了。考虑以处理方式更改代码。
答案 1 :(得分:0)
我刚刚完成了应用程序的少量运行(10-20次运行)。结果很好(即没有崩溃)
当GameOver = true时,我已清除处理程序中的排队消息,这里是带有更改的代码(可能会帮助其他人):
public static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what)
{
case newgame.STATE_GAMEOVER:
AlertDialog.Builder builder = new AlertDialog.Builder(newgame.gNewGameContext);
builder.setCancelable(false);
builder.setTitle("GaMeOvEr");
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage("Play again ?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No" , dialogClickListener).show();
this.removeMessages(newgame.STATE_GAMEOVER);
break;
}
}
};
..我添加了这行代码(清除Handler中的消息队列):
“this.removeMessages(newgame.STATE_GAMEOVER);”
不知道这是否是解决方案,但到目前为止一直有效 再次感谢你。
好的,我注意到的另一件事是:
我的手机上安装了一个应用程序,类似于TaskManager。有了这个应用程序,我可以看到我的应用程序多少内存用途,CPU等(监控应用程序)
但是当我退出我的游戏应用程序时,运行TaskManager我注意到了我的应用程序。仍在运行但处于“睡眠”模式。这通常是?
感谢。