处理表面视图时未调用OnResume

时间:2013-08-09 18:26:35

标签: android surfaceview onresume

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

应用程序已启动并正常显示。 我按下主页按钮.--> onPause调用,Surfaceview被破坏,Thread被正确杀死。 现在,当我再次点击我的应用程序时OnResume没有被调用,我看不到任何事情发生,实际上手机卡住了。

每次有新表面时,我都会创建一个新线程。

我不确定为什么这段代码有问题,但我主要怀疑SurfaceView中有些东西被错误处理了。

请帮助!!

@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()");      
    }

2 个答案:

答案 0 :(得分:0)

你能发布这个adb logcat吗?错误可能在onCreate()中。

当调用onPause()时,它会调用surfaceDestoryed()然后调用onDestroy()。

当你重新打开你的应用程序时,它可能再次调用onCreate()并且错误可能在那时发生,这就是为什么onResume()永远不会被调用。

没有logcats很难调试。

答案 1 :(得分:0)

经过多次努力,我发布了我的代码错误。

基本上在surfaceDestroyed中我调用stopThread来阻塞调用currentThread.Join() 所以我的MainThread被阻止了,没有回应任何东西。

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

我的线程实现

 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(),一切都运行得很好!!

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