2 xiaoxiaobian3310903 xiaoxiaobian3310903 于 2012.09.24 15:13 提问

android SurfaceView结束的问题

最近在写一个游戏,使用到了SurfaceView,在绘制时使用while(true)来作为条件,等按返回键程序退出后看log,发现while(true)这个循环仍然为运行,为什么Activity结束的时候这个while(true)还在运行?

5个回答

gouxiaojin
gouxiaojin   2012.09.24 15:31
已采纳

这是activity生命周期问题,因为你的while(true)循环并没有结束,因此线程一直在运行,activity调用finish的时候并不是要真正结束activity,只有activity实例没有使用而且内存不足才会主动结束此activity,但是线程仍然在继续运行,所以不可能立即结束掉。

通过设置标志位来解决,while(flag),然后你结束游戏的时候或者在finish前将flag标志位置为false,即可结束游戏主循环。搞定!

MrsSeven7
MrsSeven7   2012.09.24 16:13

我的游戏程序里面是这样:

 while(this.running)
{
        //**
}
this.thread.interrupt();

其中onPause:

this.worker.running = false;

onResume:

  this.worker.restart();
franzhong
franzhong   2012.09.25 15:41

那是线程还在运行,通常处理最常用的两种方法:
1:顶部设置一个变量 private boolean bFlag = true;
在线程中使用while(this.bFlag)这样来循环
在onPause里设置 this.bFlag=false;既可
2:在退出时onPause
调用interrupt()方法;

推荐第一种方法可

Sueyexin
Sueyexin   2012.09.24 15:29

while(boolean变量)来代替, 在Activity的OnDestroy里设置变量为false,这样安全结束。。

至于Activity什么时候被回收是有虚拟机控制的吧。
若是要结束可以可以kill该程序的进程,在完全结束程序

ce_la_vie
ce_la_vie   2012.09.24 15:54

提供一个思路,试试在应用里面添加一个控制,当game退出时控制应用的变量也变为false状态。

while(appActive)
//添加游戏控制

这样当按游戏退出键时应用也自动退出了。

谢谢评论,如果用onPause()可以在里面添加一行:

appActive = false;
suannai0314
suannai0314 如果您觉得哪个答案解决了问题可以采纳哦
5 年多之前 回复
xiaoxiaobian3310903
xiaoxiaobian3310903 哦,明白了
5 年多之前 回复
loFataMer
loFataMer 思路不错,但是最好使用onPause()。
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!