我正在使用Android应用程序,我使用服务在一个时间间隔内使用计时器获取位置。但如果我将我的应用程序保留在后台一段时间,那么应用程序退出并重新调用其 onCreate()方法,我的计时器停止,请告诉我如何长时间运行我的应用程序。 / p>
timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
}
};
timer.schedule(timerTask, 1000*60*4, 1000*60*4);
答案 0 :(得分:1)
如果服务持续传递给用户,那么运行较长时间的服务仅值得执行(和能耗)时间。这不是位置轮询器的情况,它仅在短时间内提供价值,具体取决于您对轮询位置的处理方式。在这种情况下,您应该实现一个执行短任务的服务(我的意思是一般意义上的任务,而不是Task
对象),然后您必须安排您的服务不时运行。您可以使用Android的调度机制AlarmManager来安排您的服务。
这种方法存在一个问题:当系统处于节电状态睡眠状态时,您的服务必须获取唤醒锁才能正常执行,然后在完成时将系统的唤醒锁释放到回到睡眠状态。实现此唤醒锁获取/释放机制并非易事。
我建议您使用Commonsware的Location Poller实现,而不是自己实现。它经过了充分测试,解决了获取/释放唤醒锁定以使您的服务在后台执行的问题。
如果您坚持自己进行轮询(例如,使用已经编写的代码),我建议使用Commonsware的WakefulIntentService,以避免为您的服务编写自己的唤醒锁定获取/释放机制。这很容易使用。
答案 1 :(得分:0)
长期运行任务的解决方案是使用Android Service。
服务是一种应用程序组件,表示应用程序希望在不与用户交互的情况下执行较长时间运行的操作,或者为其他应用程序提供要使用的功能。每个服务类必须在其包的AndroidManifest.xml中具有相应的声明。可以使用Context.startService()和Context.bindService()启动服务。