首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理表面视图时未调用OnResume

处理表面视图时未调用OnResume
EN

Stack Overflow用户
提问于 2013-08-10 02:26:35
回答 2查看 757关注 0票数 1

我的应用程序有一个将视图设置为SurfaceView的mainActivity。

应用程序已启动并正常显示。我按下主页按钮。-->当调用暂停时,Surfaceview被销毁,线程被正常终止。现在,当我再次点击我的应用程序时,OnResume not called,我看不到任何事情发生,事实上,手机卡住了。

每当我有一个新的表面时,我就创建一个新的线程。

我不确定为什么这段代码会有问题,但我主要怀疑surfaceView中的某些东西处理不当。

请帮帮我!!

代码语言:javascript
复制
@Override
public void surfaceCreated(SurfaceHolder arg0) {
    // TODO Auto-generated method stub
    BounceLogger.logIt(this, "surfaceCreated");
    graphThread=new GraphUpdaterThread(mSurfaceHolder);
    graphThread.runThread();

}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
    // TODO Auto-generated method stub
    BounceLogger.logIt(this, "surfaceDestroyed");
    graphThread.stopThread();
    graphThread= null;
}






@Override
    public void onPause()
    {
        super.onPause();
        //handleProcessPaused();
        //mGsv.getThread().pauseThread();

        BounceLogger.logIt(this,"onPause()");        
    }

    @Override
    public void onResume()
    {
        super.onResume();
        //mGsv.getThread().resumeThread();
        //init();
        BounceLogger.logIt(this,"onResume()");      
    }
EN

回答 2

Stack Overflow用户

发布于 2013-08-10 05:27:40

你能把这个的adb logcat贴出来吗?错误可能在onCreate()中。

当调用onPause()时,它接着调用surfaceDestoryed(),然后可以调用onDestroy()。

当您重新打开应用程序时,它可能会再次调用onCreate(),错误可能会在此时发生,这就是onResume()从未被调用的原因。

如果没有logcat,很难进行调试。

票数 0
EN

Stack Overflow用户

发布于 2013-08-13 05:22:38

经过许多努力,我释放了我的代码的错误。

基本上,在surfaceDestroyed中,我调用stopThread,它执行阻塞调用currentThread.Join(),因此我的MainThread被阻塞,并且不响应任何东西。

代码语言:javascript
复制
public void surfaceDestroyed(SurfaceHolder arg0) {
    // TODO Auto-generated method stub
    BounceLogger.logIt(this, "surfaceDestroyed");
    graphThread.stopThread();                  
    graphThread= null;
}

我的线程实现

代码语言:javascript
复制
 public void run()
      {

          BounceLogger.logIt(this, "run start!!");
          while(!stop)
          {
              while(run)
              {
                updateThread(); 
              }
              if(!stop)
                  waitThread();
          }
          BounceLogger.logIt(this, "run end!!");
          return;
      } 

 public synchronized void stopThread()
  {
        run = false;     
        stop= true;
        boolean retry = true;
           while(retry)
           {
             try{
                Thread.currentThread.join();
                retry= false;
                }
             catch(Exception e)
             {
              } 
           }    
  }

我刚刚删除了stopThread函数中的join(),一切都运行得很好!!。

注意:我通过设置停止、运行和每次创建新线程的标志来杀死我的线程!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18153262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档