Android强制关闭线程异常

问题描述:

正常情况下,当我关闭我的应用程序时,我发送一个意向到我的服务,以使用带有额外布尔值true的onStartCommand安全关闭。我在我的应用程序类'onTerminate中执行此操作。我添加了if语句,因为当强制关闭此块中的应用程序时,我收到了nullptrexception。Android强制关闭线程异常

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    if (intent != null) { 
     boolean state = intent.getBooleanExtra("terminate", false); 
     mSafeShutdown = state; 
    } 
    else if (mUpdater != null && mUpdater.isRunning()) { 
     Log.d(TAG, "activity force closed?" + 
      " Attempting to handle service thread shutdown safely..."); 
     mUpdater.isRunning(false); 
     try { 
      mUpdater.join(); 
     } catch (InterruptedException e) { 
      Log.e(TAG,"Service's UpdaterThread couldn't join"); 
     } 
    } 
    return START_STICKY; 
} 

然而,这引起我的服务活路 -

static final int DELAY = 2000; 
public void run() { 
    while (mIsRunning) { 
     if (!mJobQueue.isEmpty()) { 
      //do work 
     } 
     else if (mSafeShutdown) { 
      mIsRunning = false; 
      stopSelf(); 
     } 
     else { 
      sleep(DELAY); 
     } 
    } 
} 

是强制关闭断开其使得很难看到究竟怎么回事..有没有更好/更安全的方式调试器的事实告诉我的服务线程应用程序已关闭?

+0

“我做这在我的应用程序类的onDestroy” ......除非你有不同的文档对我来说,Android应用程序类不具有的onDestroy()方法。另外,你为什么'强行关闭'? – Squonk 2011-03-31 18:18:12

+0

@MisterSquonk:我的意思是关于终止,我说错了。很多人喜欢强制关闭他们的应用程序,因为他们相信它可以节省大量的电池寿命。我对社会认为的方式不负责任! – 2011-03-31 18:59:28

由于您的线程是一个子类,因此在其中创建一个方法将其关闭并在父类中调用它。

一个例子可以在这里找到 http://download.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

+0

我让mSafeShutdown成为updaterThread的成员,而不是修复它的服务。然而,我偏爱这篇文章,因为我得到了我需要修复的信息,当我回去清理。谢谢。 – 2011-03-31 20:40:09