2015-12-15 36 views
1

我有一個服務正在監聽來自服務器的一些事件。 服務具有START_STICKY標誌,使其在被操作系統殺死時可以重新啓動。 當服務收到一個事件我有兩種情況。 首先,如果活動沒有中止,我需要將結果發送到本地廣播接收器並更新UI。其次,如果它被操作系統殺死了,我想重新創建它併發送數據包。Android:檢查活動是否被系統從服務中銷燬

但我不知道如何識別android殺死我的活動。 onDestroy活動事件不會出現在這種情況下。

@Override 
    public void onComplete(CurrentOrdersResponse response) { 
     if (response == null) { 
      return; 
     } 
     boolean isActivityDestroyed = mPreferences.getBoolean(MainActivity.IS_MAIN_ACTIVITY_DESTROYED_PREF_KEY, false); 
     if (!isActivityDestroyed) 
      sendResult(response.getResJSONStr(), CURRENT_ORDERS_ACTION); 
     else { 
      Intent intent = new Intent(this, MainActivity.class); 
      intent.setAction(Intent.ACTION_VIEW); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.putExtras(extras); 
      startActivity(intent); 
     } 
     int resCode = response.getResCode(); 
     Log.i(LOG_TAG, "Service resCode" + " " + resCode); 
    } 
+0

如果知道它是否可見,這還不夠嗎?如果是這樣,http://stackoverflow.com/a/5446680/3209739是不夠的? – cgr

+0

不是。這是不夠的。我需要更新我的用戶界面,即使它在後臺(已停止並暫停) –

+1

然後,您還應該檢查它是否在不可見的後退棧中可用。如果它們在堆棧中更新那裏。 – cgr

回答

4

聽起來像是您正在使用LocalBroadcastManager。那很好。其sendBroadcast()方法返回一個布爾值,指示是否找到了註冊的接收者。您可以使用該結果來確定您的接收活動(MainActivity)是否存在並已註冊接收廣播。

當您的服務有事件發送到MainActivity時,首先嚐試使用sendBroadcast()發送事件。如果它返回true,那麼你完成了。如果它返回false,則該活動未被註冊,並且必須使用startActivity()創建,並且事件作爲額外傳遞,如發佈的代碼中所示。

+0

謝謝。你是對的!即使在android javadoc中,也沒有關於返回sendBroadcast()的值。我沒有想到這樣一個簡單的解決方案! –

+0

有關文檔問題的公開[AOSP問題](https://code.google.com/p/android/issues/detail?id=59626)。我查看了源代碼,以瞭解sendBroadcast()的返回值的含義。 –

相關問題