小边3310903
2012-09-24 07:13
采纳率: 100%
浏览 3.8k
已采纳

android SurfaceView结束的问题

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • gouxiaojin 2012-09-24 07:31
    已采纳

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

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • Sueyexin 2012-09-24 07:29

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

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

    评论
    解决 无用
    打赏 举报
  • ce_la_vie 2012-09-24 07:54

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

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

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

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

    appActive = false;
    
    评论
    解决 无用
    打赏 举报
  • MrsSeven7 2012-09-24 08:13

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

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

    其中onPause:

    this.worker.running = false;
    

    onResume:

      this.worker.restart();
    
    评论
    解决 无用
    打赏 举报
  • franzhong 2012-09-25 07:41

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

    推荐第一种方法可

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题