GPS管理器上的weired android错误
在过去的几天里,我一直在努力找出这个问题,但运气不太好。基本上,我的gps侦听器是这样注册的,用于获取gps事件:GPS管理器上的weired android错误,android,Android,在过去的几天里,我一直在努力找出这个问题,但运气不太好。基本上,我的gps侦听器是这样注册的,用于获取gps事件: private void registerForNotifications(int gpsActivationIntervalMillis) { // gps satellite based gpsLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, gpsActivatio
private void registerForNotifications(int gpsActivationIntervalMillis) {
// gps satellite based
gpsLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, gpsActivationIntervalMillis, AppSettings.getMinimumDistance(),gpsLocationListener);
gpsLocationManager.addGpsStatusListener(gpsLocationListener);
}
并使用以下代码注销:
private void unRegisterForNotifications() {
gpsLocationManager.removeUpdates(gpsLocationListener);
gpsLocationManager.removeGpsStatusListener(gpsLocationListener);
}
这是在后台服务上完成的,运行非常完美。但是,当我尝试通过取消注册和以不同间隔注册来更改间隔时:
私有void restart(){
登记装饰(间隔);
取消注册通知();
}
,我遇到了这样的情况:
05-21 13:12:56.354:WARN/MessageQueue(7290):处理程序{460f47a8}向死线程上的处理程序发送消息
05-21 13:12:56.354:WARN/MessageQueue(7290):java.lang.RuntimeException:处理程序{460f47a8}向死线程上的处理程序发送消息
05-21 13:12:56.354:WARN/MessageQueue(7290):位于android.os.MessageQueue.enqueueMessage(MessageQueue.java:179)
05-21 13:12:56.354:WARN/MessageQueue(7290):位于android.os.Handler.sendMessageAtTime(Handler.java:457)
05-21 13:12:56.354:WARN/MessageQueue(7290):位于android.os.Handler.sendMessageDelayed(Handler.java:430)
05-21 13:12:56.354:WARN/MessageQueue(7290):在android.os.Handler.sendMessage(Handler.java:367)
05-21 13:12:56.354:WARN/MessageQueue(7290):在android.location.LocationManager$ListenerTransport.onLocationChanged(LocationManager.java:157)
05-21 13:12:56.354:WARN/MessageQueue(7290):位于android.location.ILocationListener$Stub.onTransact(ILocationListener.java:58)
05-21 13:12:56.354:WARN/MessageQueue(7290):位于android.os.Binder.execTransact(Binder.java:288)
05-21 13:12:56.354:WARN/MessageQueue(7290):在dalvik.system.NativeStart.run(本机方法)
大宗报价
看起来像是死了的活动/处理程序问题,但安卓不应该处理这个问题吗?如何正确更改gps订阅流程?好的,我找到了问题的原因。我的活动中有一个重启按钮,可以正确重启服务。但是当我的AlarmListener试图从后台重新启动它时,问题就出现了。我没有注意到“register”方法应该总是从循环器线程调用!解决方案很简单,只需将重启作业发布到连接到主线程的处理程序,而不是直接从AlarmManager线程调用重启方法 你的意思是由处理程序启动接收器吗?