我目前正在開發一款需要大量電池才能支持背景GPS跟蹤的應用程序。我的經驗表明,當人們不再需要跟蹤時,人們只會忘記在後臺運行的應用程序。因此我設置了一些應該在4小時後關閉應用程序的代碼。在一段時間後自行破壞Android應用程序
public class SelfDestructor {
private static SelfDestructor instance;
private final long IDLE_TIME_UNTIL_AUTO_DESTRUCT = 4 * 60 * 60 * 1000; // 4 hours
private Handler handler;
private Runnable closeApp = new Runnable() {
@Override
public void run() {
System.exit(0);
}
};
public static SelfDestructor getInstance() {
if (SelfDestructor.instance == null) {
SelfDestructor.instance = new SelfDestructor();
}
return SelfDestructor.instance;
}
public void keepAlive() {
if (handler == null) {
handler = new Handler();
}
handler.removeCallbacks(closeApp);
handler.postDelayed(closeApp, IDLE_TIME_UNTIL_AUTO_DESTRUCT);
}
}
現在我在主要活動中調用keepAlive()。
@Override
protected void onResume() {
super.onResume();
SelfDestructor.getInstance().keepAlive();
}
@Override
protected void onStart() {
super.onStart();
SelfDestructor.getInstance().keepAlive();
}
現在,如果我設置時間大約一個小時左右,並調試該功能一切工作正常。如果我將時間設置爲4小時,則從不會調用System.exit(0);
。我假設關閉回調的應用程序線程在一段時間後被android系統擱置,因此在gps將繼續運行時不會再執行。任何想法如何正確地得到這個工作?
不是確定如何做到這一點,但添加通知欄中無法刪除的通知應該是讓用戶瞭解的好方法。確保點擊通知時,系統會提示用戶關閉進程或保持運行狀態。 – 2014-10-05 21:15:30
是啊,已經實現了...... :) – stephanlindauer 2014-10-05 21:16:34
我想這是處理這個問題的最好方法。自動殺死一個進程似乎並不適合我。至少,我會將它設置爲空閒時間的設置,而不是使用常量。無論如何,就我所知,應用程序可能會被放在後臺,這意味着代碼將不會運行。您必須改爲創建鬧鐘。 https://developer.android.com/training/scheduling/alarms.html – 2014-10-05 21:21:10