我目前正在开发一款需要大量电池才能支持背景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