我使用requestLocationUpdates
在我的应用中获取当前位置,但如果检测时间太长,我会使用计时器取消操作。
为了您的信息,我告诉您,我在WakefulBroadcastReceiver
中执行了所有这些过程,因此设备在收到位置或超时之前不应该睡觉。一旦发生其中一个,我就会致电completeWakefulIntent
让设备再次入睡。
一切都很好但有时计时器永远不会完成,也没有位置。我想我的过程可能会被系统杀死或破坏。
那么,有没有办法确保计时器在一段时间后执行?
任何帮助将不胜感激
答案 0 :(得分:0)
检查AlarmManager。
触发位置查找活动后,安排非重复警报。 在适当的时间之后,此警报反过来触发取消定位活动的杀手活动
或者使用Handler。类似的东西:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// do something
// this executes after 2000 milliseconds
}
}, 2000);
答案 1 :(得分:0)
当它在主线程上运行时,你永远不应该在其中执行长时间运行的操作(在考虑阻塞接收器和被杀死的候选者之前,系统允许超时10秒。)
此外,如果此BroadcastReceiver是通过<receiver>
标记启动的,则从onReceive()
返回后该对象不再存在。这意味着您不应该执行任何异步返回结果的操作。
干杯!
答案 2 :(得分:-1)
使用Timer
。
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
//This will execute afteer every 1 Minute
}
}, 0, 60000);