我正在处理我的第一个Android应用程序,它的作用是它有一个活动,在登录后启动一个服务,在一段时间后或用户位置更改时将用户位置ping到服务器。现在,对于从服务到活动的通信,我正在使用BroadcastReceiver。
将位置记录到服务器后的服务会广播我的活动接收的消息并相应地更新UI。现在一切都很好,直到这一点,但是当我的服务仍然在后台运行时,我从后台删除我的活动会发生什么,每当服务在服务器上记录位置并广播消息时它崩溃并显示一条消息在屏幕上说你的申请已被停止。
我认为Android广播系统期望我的活动能够继续接收广播,当它没有找到它时,它会崩溃服务。
我想要的是,如果我的活动在附近,它将接收广播,但如果不是,则应忽略广播。它不应该崩溃我的服务。
我正在遵循正确的步骤,在onResume()中注册服务并在onPause()中取消注册。此外,我正在动态注册服务而不是清单。
答案 0 :(得分:0)
你应该使用bindService(intent)
而不是startservice(intent)
无限期的内部时间。因此,当你完成活动后,你的活动被绑定到你的服务,然后拨打onUnbind()
。
活动呼叫停止服务中的onDestroy()。
检查清单,你的收件人没有在那里注册。
答案 1 :(得分:0)
我在那里犯了一个愚蠢的错误。我将我的活动中定义的变量的引用传递给广播服务。当我的活动仍处于活动状态时它工作正常但是当我的活动被杀死时,服务最终会出现空指针,在更新时崩溃了服务。