我的应用程序有一个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()");
}
答案 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(),一切都运行得很好!!
注意:我通过设置标志停止,每次运行并创建一个新线程来杀死我的线程!!