2010-04-20 171 views
0

我在我的應用程序中使用靜態布爾值使SMS接收器處於活動狀態。Android生命週期問題

public class SmsListener extends BroadcastReceiver { 

     public static boolean activated = false; 


     @Override 
     public void onReceive(Context context, Intent intent) 
      if (activated){ //do something 
       } 
     ... 
     } 
} 

我有一個小部件來激活或不是短信接收器(通過這個靜態值)。一切運作良好,但我只注意到,如果手機內存變低,短信監聽器失去其狀態,應用程序無法按預期工作。 我想它與android生命週期有關。我沒有後臺服務,系統終止了這個過程。我應該避免使用這種方法嗎?我應該總是開始一項服務,只爲了避免android進程kill?

感謝

託比亞Loschiavo

回答

0

我發現有全局唯一可靠的辦法就是把他們的服務。 Android的方式是使用onSaveInstanceState,然後在所有可能或不可能用該狀態調用的各種方法中恢復狀態。即使這並不完全可靠,所以你也可以在onPause時將狀態寫入首選項,然後在onResume中讀取它們。

還要注意,根據你的清單,任何事情都可能導致你的活動失敗,比如打開鍵盤或旋轉手機,而不僅僅是內存不足。

+0

我已經在首選項中存儲激活...它似乎工作 – Matroska 2010-04-20 21:11:47

+0

我也設置了AlarmManager Alarm。如果應用程序遇害,鬧鐘是否能夠存活?從文檔看起來是的。 – Matroska 2010-04-21 08:17:21

+0

幾乎所有的東西都會比較活躍。它們應該被設計成在不存在的情況下不斷閃爍。 – drawnonward 2010-04-21 17:25:13