尝试停止不运行线程时无法销毁活动

时间:2012-03-30 06:51:40

标签: java android

我对我制作的主题感到困惑。我有几个线程正在运行,一些活动创建并清理一个新线程。所以现在当我尝试退出应用程序时,我使用aboart。我检查/当线程正在运行其关闭罚款。但是当我没有得到错误和“...... 11更多”......任何想法我做错了什么?

    public void run() {
    while (abort_) {
        //doeing stuff
        } 
    }


synchronized public void abort() {
    abort_ = true;
    if (ioio_ != null) {
        ioio_.disconnect();
    }
}

当Main()被破坏时:

public void onDestroy() {
    super.onDestroy();
    Start_settings.stopSetThread();
    bool = false; //stop screanThrea
        if(ioio_thread_.isAlive()){
              ioio_thread_.abort();
        }
}

所以当onDestroy()方法被调用时,它的throuws: 更新我错过了这条线:

W/dalvikvm(8672): threadid=1: thread exiting with uncaught exception (group=0x40018578)



E/AndroidRuntime(8191): FATAL EXCEPTION: main
E/AndroidRuntime(8191): java.lang.RuntimeException: Unable to destroy activity {android.io/android.io.Main}: java.lang.NullPointerException
E/AndroidRuntime(8191):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2676)
E/AndroidRuntime(8191):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2694)
E/AndroidRuntime(8191):     at android.app.ActivityThread.access$2100(ActivityThread.java:117)
E/AndroidRuntime(8191):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
E/AndroidRuntime(8191):     at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(8191):     at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(8191):     at android.app.ActivityThread.main(ActivityThread.java:3687)
E/AndroidRuntime(8191):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(8191):     at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(8191):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
E/AndroidRuntime(8191):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
E/AndroidRuntime(8191):     at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(8191): Caused by: java.lang.NullPointerException
E/AndroidRuntime(8191):     at android.kvisio.Main.onDestroy(Main.java:364)
E/AndroidRuntime(8191):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2663)
E/AndroidRuntime(8191):     ... 11 more

我通过在启动线程时放置标志并检查标志而不是thread.isAlive()方法来解决我的问题。但我的问题仍然是: 为什么当我检查没有使用thread.isAlive()运行线程时,它会抛出这种异常? 谢谢你的时间。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的错误。执行以下操作:

if(ioio_thread_ != null){
   if(ioio_thread_.isAlive()){
   // Do whatever 
}

答案 1 :(得分:0)

怎么样:

public void onDestroy() {
    Start_settings.stopSetThread();
    bool = false; //stop screanThrea
    if(!ioio_thread_.isAlive()){
          ioio_thread_.abort();
    }
    super.onDestroy();
}

答案 2 :(得分:0)

如果您遇到错误,Start_settingsioio_thread_为空。

如果你精确了第364行的内容,你会看到哪一行。它永远不会定义,或者在某些时候为null。

有可能你的线程为空。测试线程的存在和活动状态,如下所示:

if(ioio_thread_ != null && ioio_thread_.isAlive()){
    // Do whatever (like aborting)
}