我的应用程序有一个将视图设置为SurfaceView的mainActivity。
应用程序已启动并正常显示。我按下主页按钮。-->当调用暂停时,Surfaceview被销毁,线程被正常终止。现在,当我再次点击我的应用程序时,OnResume not called,我看不到任何事情发生,事实上,手机卡住了。
每当我有一个新的表面时,我就创建一个新的线程。
我不确定为什么这段代码会有问题,但我主要怀疑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()");
}发布于 2013-08-10 05:27:40
你能把这个的adb logcat贴出来吗?错误可能在onCreate()中。
当调用onPause()时,它接着调用surfaceDestoryed(),然后可以调用onDestroy()。
当您重新打开应用程序时,它可能会再次调用onCreate(),错误可能会在此时发生,这就是onResume()从未被调用的原因。
如果没有logcat,很难进行调试。
发布于 2013-08-13 05:22:38
经过许多努力,我释放了我的代码的错误。
基本上,在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(),一切都运行得很好!!。
注意:我通过设置停止、运行和每次创建新线程的标志来杀死我的线程!!
https://stackoverflow.com/questions/18153262
复制相似问题