为啥我的 LocationListener 变为空?
Posted
技术标签:
【中文标题】为啥我的 LocationListener 变为空?【英文标题】:Why does my LocationListener become null?为什么我的 LocationListener 变为空? 【发布时间】:2011-01-10 08:46:00 【问题描述】:我的服务中名为myService
的LocationListener
存在问题。
这是我的代码:
///onStart method ..
onStart()
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE)
.
.
provider = locationManager.getBestProvider(criteria, true);
locationListener = (LocationListener) new MyLocationListener();
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
在我的活动中有一个应该停止服务的按钮。点击我正在做的按钮:
stopService(new Intent(getApplicationContext(), myService.class)
在myService.java
文件中我有:
////onDestroy method....
onDestroy()
locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.removeUpdates(locationListener); //Getting **exception here ....
我得到以下异常:
java.lang.IllegalArgumentException: listener==null at android.location.LocationManager.removeUpdates(LocationManager.java:799) at
<.package_name>myService.onDestroy(myService.java:407)
我不知道为什么 listener 会无缘无故变为 null。请你能告诉我哪里出错了!
【问题讨论】:
您是否在代码中的其他位置手动将其设置为 null? 我确定没有将其设置为 null 。我认为服务已重新启动,但我不明白当服务重新启动时它会执行哪部分代码。 【参考方案1】:Android 系统仅在内存不足时才会强制停止服务,并且必须为具有用户焦点的 Activity 恢复系统资源。如果服务绑定到具有用户焦点的活动,则它不太可能被杀死,如果服务被声明在前台运行(稍后讨论),那么它几乎永远不会被杀死。否则,如果服务已启动并且长时间运行,那么系统将随着时间的推移降低其在后台任务列表中的位置,并且该服务将变得非常容易被杀死 - 如果您的服务已启动,那么您必须将其设计为优雅地处理系统重新启动。如果系统终止了您的服务,它会在资源再次可用时立即重新启动它(尽管这也取决于您从 onStartCommand() 返回的值,稍后将讨论)。有关系统何时可能销毁服务的更多信息,请参阅进程和线程文档。
【讨论】:
【参考方案2】:我可以离开这里,但似乎您的服务被杀死然后(稍后)重新启动。为什么不把实例化的东西移到onCreate()
?
【讨论】:
感谢您的回答。能否请您简要介绍一下服务重启的原因/原因。以上是关于为啥我的 LocationListener 变为空?的主要内容,如果未能解决你的问题,请参考以下文章