你在用錯誤的方法來看它。
如果你有一個線程在通知欄上運行併發出通知,我會假設你有一個服務正在運行,並且這個服務知道該線程並且有一個對它的引用。這樣,您的通知PendinIntent,不應該簡單地觸發一個BroadcastReceiver,但觸發相同的服務與Intent額外表明該服務應該取消線程。
所以假設你的服務:
public MyService extend Service{
private Runnable myThread = new Runnable{
@Override
public void run(){
// ... here you're doing the job on the different thread
}
};
}
類似的東西:
Intent i = new Intent(this, MyService.class);
i.putExtra("cancel", true);
PendingIntent pi = PendingIntent.getService(// put here the intent)
然後,只要單擊通知,您的服務已線程將從onStartCommand
被執行,所有你需要要做的是:
cancel = getIntent.getBooleanExtra("cancel", false);
然後裏面的線程你必須chec
public MyService extend Service{
boolean cancel = false;
private Runnable myThread = new Runnable{
@Override
public void run(){
// ... here you're doing the job on the different thread
if(cancel)
return;
}
};
}
線程是進程內運行,你的整個應用程序運行大概一個過程,創建的所有線程的應用程序進程內運行,這就是爲什麼殺死進程沒有按」:從這樣的業務k爲
boolean cancel
工作。爲什麼你不能訪問線程對象?你可以創建一個帶有靜態字段的靜態類,以便在創建腳本時存儲腳本對象,這個類可以讓你輕鬆訪問任何你想要的線程對象。我很抱歉,但我不知道如何在沒有它們的實例的情況下終止線程,但是如果可能的話,我想找到一個使用線程對象的解決方案。 –@TimVisee - 我會給一個靜態列表一個鏡頭 - 如果我的應用程序被破壞,線程也會被刪除? - 我很擔心我可能遇到這樣一種情況:對線程的引用將被刪除,並且我無法殺死線程 – jcw
我其實並不確切,我從未編寫過一個Android應用程序,所以是的,我是不能給你這個答案。我假設線程將被銷燬,如果你終止了應用程序進程,它肯定會被銷燬。殺死應用程序線程(而不是其他線程)不應該殺死其他線程,你總是可以試試它!您可能需要將主線程用作其他線程的主線程,您需要讓主線程繼續運行才能夠到達線程實例,據我所知。 [1/3] –