我有一種應用程序,它以兩種不同的方式與其他設備通信:發送聲音信號並通過Wifi發送消息。爲了處理Wifi通信,我創建了一個具有線程監聽廣播消息的服務。對於聲音信號,我也有線程監聽。所以總共有兩個線程,當我想要按一個按鈕時,我想要殺死它。Android:殺死線程
在主要活動我把這種方法,當我按下按鈕:
public void onStop() {
super.onStop();
mHelloService.stop();
//This is the Sounds Thread
mListenThread = null;
if(D) Log.e(TAG, "-- ON STOP --");
}
而在服務我有這個功能停止WiFi的主題
public synchronized void stop() {
System.out.println("Close service");
if (mHelloThread != null) mHelloThread = null;
}
我試試這個,但線程繼續工作。我在另一個問題閱讀,有人建議使用:
mHelloThread.interrupt();
但我嘗試過了,我得到了這些錯誤:
08-30 20:18:08.592:d/AndroidRuntime(7312):關閉VM 08-30 20:18:08.592:W/dalvikvm(7312):threadid = 1:線程退出 未捕獲的異常(group = 0x419bc930)08-30 20:18:08.592: E/AndroidRuntime(7312 ):致命例外:main 08-30 20:18:08.592: E/AndroidRuntime(7312):java.lang.NullPointerException 08-30 20:18:08.592:E/AndroidRuntime 7312):at android.nacho.SoundLocalizer.HelloMessage.stop(HelloMessage.java:82) 08-30 20:18:08.592:E/AndroidRuntime(7312):at android.nacho.SoundLocalizer.SoundLocalizer.onStop( SoundLocalizer.java:349) 08-30 20:18:08.592:E/AndroidRuntime(7312):at android.nacho.SoundLocalizer.SoundLocalizer $ 3.onClick(SoundLocalizer.java:405) 08-30 20:18: android.view.View.performClick(View.java:4202)08-30 20:18:08.592: E/AndroidRuntime(7312):at android.view.View $(E)/ AndroidRuntime(7312):at android.view.View $ PerformClick.run(View.java:17340)08-30 20:18:08.592:E/AndroidRuntime(7312):at android.os.Handler.handleCallback(Handler.java:725)08-30 20:18:08.592:E/AndroidRuntime(7312):at android.os.Handler.dispatchMessage(Handler.java:92)08-30 20:18:08.592:E/AndroidRuntime(7312):at android .os.Looper.loop(Looper.java:137)08-30 20:18:08.592: E/AndroidRuntime(7312):at android.app.ActivityThread.main(ActivityThread.java:5039)08-30 20:18:08.592:E/AndroidRuntime(7312):at java.lang.reflect.Method.invokeNative(Native Method)08-30 20:18:08.592:E/AndroidRuntime(7312):at java.lang .reflect.Method.invoke(Method.java:511)08-30 20:18:08.592: E/AndroidRuntime(7312):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 793) 08-30 20:18:08.592:E/AndroidRuntime(7312):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)08-30 20:18:08.592:E/AndroidRuntime (7312):at dalvik.system.NativeStart.main(Native Method)
你推薦我做什麼?非常感謝
可能重複的[你如何殺死Java中的線程?](http://stackoverflow.com/questions/671049/how-do-you-kill-a-thread-in-java) – Gray
感謝您的反饋,我會閱讀它,看看我能否學到新的東西。但是我問到Android(我幾乎知道Java中的所有東西都可以在Android中使用),但是也許有人知道更好的方法來實現它,這是專門針對Android的。 –
什麼是mHelloService?一個Android'服務'沒有'stop()'方法AFAIA ...編輯:derp nvm,你添加它,我意識到... – ataulm