我正在尝试创建一个服务,每隔几分钟检查一次用户的位置,并在位置更改时执行某些代码。
这是我服务的onCreate代码。
public void onCreate() {
super.onCreate();
Log.i(TAG, "Service creating");
//timer = new Timer("TweetCollectorTimer");
//timer.schedule(updateTask, 1000L, 60 * 1000L);
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
}
当我的位置发生变化时,它可以执行某些操作。但是我在我的logcat“在死线程上向处理程序发送消息”中收到以下警告
我想知道问题是什么,有没有更好的方法来实现我想做的事情?
答案 0 :(得分:1)
您必须警惕您的位置监听器和您的活动生命周期。
如果您在活动的onCreate()
方法中请求位置更新,请务必稍后取消注册,例如onDestroy()
,但在我看来,注册它会更好{{} 1}}并取消注册onStart()
。
您的位置监听器似乎正在调用可能已经死亡的活动的方法。
如果您计划在多个活动中实现位置检测,那么在位置更新时创建包含调用抽象方法的侦听器的基类可能是明智的。您可以通过覆盖onStop()
来注册您的侦听器并onStart()
取消注册您的侦听器,从而进一步推动它。虽然,不要忘记在该抽象类和子类中调用超级构造函数。
希望它有所帮助,而且不会太混乱!
编辑:
代码示例如下:
onStop()