0

我正在开发 Android 应用程序,在该应用程序中,我使用服务在时间间隔内使用计时器获取位置。但是,如果我将我的应用程序保留在后台一段时间,那么应用程序退出及其onCreate()方法将被重新调用并且我的计时器停止,请告诉我如何才能长时间运行我的应用程序。

timer  = new Timer();
timerTask = new TimerTask() {           
    @Override
    public void run() {                 
    }
};
timer.schedule(timerTask, 1000*60*4, 1000*60*4);
4

2 回答 2

1

运行较长时间的服务只有在持续为用户提供价值的情况下才值得其执行(和能耗)时间。位置轮询器并非如此,它仅在短时间内提供价值,具体取决于您对轮询位置所做的事情。在这种情况下,您应该实现一个将执行短任务的服务(我的意思是一般意义上的任务,而不是Task对象),然后您必须安排您的服务不时运行。您可以使用 Android 的调度机制,称为AlarmManager来调度您的服务。

但是,这种方法存在一个问题:当系统处于省电睡眠状态时,您的服务必须获取唤醒锁才能正确执行,然后在完成后释放唤醒锁以使系统返回睡眠状态。实现这种唤醒锁获取/释放机制并非易事。

我建议您使用 Commonsware 的Location Poller实现,而不是自己实现。它经过了很好的测试,解决了为您的服务在后台执行获取/释放唤醒锁的问题。

如果您坚持自己进行轮询(例如,使用已经编写的代码),我建议使用 Commonsware 的WakefulIntentService以避免为您的服务编写自己的唤醒锁获取/释放机制。它非常易于使用。

于 2013-06-18T17:42:59.330 回答
0

长时间运行任务的解决方案是使用Android Service

服务是一个应用程序组件,代表应用程序希望在不与用户交互的情况下执行更长时间运行的操作,或提供功能供其他应用程序使用。每个服务类必须在其包的 AndroidManifest.xml 中有相应的声明。可以使用 Context.startService() 和 Context.bindService() 启动服务。

于 2013-06-18T16:41:12.753 回答