2014-08-31 90 views
0

請問您的建議,我是Android編程新手。Android:讓線程在AlarmBroarcastReceiver中一個一個排隊排隊

我正在寫一個類似鬧鐘的軟件,並且使用公共類AlarmManagerBroadcastReceiver擴展BroadcastReceiver 來捕獲AlarmManager之前設置的鬧鐘。
爲了不中斷UI,我在這個類的public void onReceive(Context context,Intent intent)中使用了新線程。 一般來說它看起來像這樣:

公共類AlarmManagerBroadcastReceiver擴展廣播接收器{

public void onReceive(Context context, Intent intent) { 

     Executors.newSingleThreadExecutor().submit(new Runnable() { 
        public void run() { 
          ... //useful code 
     } 
} 

}

有時我的應用程序面臨在多個廣播都在同一時間的情況。 這會導致多個線程在同一時間執行, 我不想發生這種情況,因爲這會干擾有用的代碼。

我想讓線程進入隊列並一個接一個地運行。 如果您之前遇到過這種情況,請您如此善意的提供建議,有沒有什麼辦法可以做到這一點?

據我所知,問題在於我讓Executors。 newSingleThreadExecutor()每當廣播出現時,創建新的執行程序,並且線程不會進入舊隊列隊列,而是進入新隊列,因此它們再次同時運行。

回答

0

在構造函數中創建一個SingleThreadExecutor;然後在onReceive中,將新的Runnable傳遞給您已有的SingleThreadExecutor

public class AlarmManagerBroadcastReceiver extends BroadcastReceiver { 

    private ExecutorService executor; 

    public AlarmManagerBroadcastReceiver { 
    executor = Executors.newSingleThreadExecutor(); 
    } 

    public void onReceive(Context context, Intent intent) { 

    executor.submit(new Runnable() { 
       public void run() { 
         ... //useful code 
    } 
} 
+0

它的工作!謝謝你,我想我還有很多東西需要學習,因爲我不完全明白它爲什麼起作用。再次感謝你,祝你有美好的一天。 – lxs 2014-08-31 17:02:15

+0

我已經測試了一段時間,但不幸的是它不知道它總是工作。只要我在應用程序 - 它工作正常。但是當我關閉應用程序並等待鬧鐘時間到來時,多個鬧鐘同時發出,並且它們仍然根據我的日誌記錄同時運行。 – lxs 2014-08-31 17:13:36

+0

我已經解決了這個使用應用程序服務,在服務類的構造函數中使用executor聲明。然後我將來自alarmbroadcastreceiver的數據傳遞給排隊和執行線程的服務。謝謝chiastic-security – lxs 2014-09-01 15:57:38