我遇到的问题是LocationListener
,我的服务名为myService
。
这是我的代码:
///onStart method ..
onStart() {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE)
.
.
provider = locationManager.getBestProvider(criteria, true);
locationListener = (LocationListener) new MyLocationListener();
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
}
在我的Activity中有一个按钮,应该停止服务。点击我正在做的按钮:
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)
我不知道为什么听众会毫无理由地变为空。请问你能告诉我哪里出错了!
答案 0 :(得分:1)
Android系统将仅在内存不足时强制停止服务,并且必须为具有用户焦点的活动恢复系统资源。如果服务绑定到具有用户焦点的活动,则它不太可能被杀死,并且如果声明服务在前台运行(稍后讨论),那么它几乎永远不会被杀死。否则,如果服务已启动且长时间运行,则系统将随着时间的推移降低其在后台任务列表中的位置,并且该服务将极易受到查杀 - 如果您的服务已启动,则必须将其设计为优雅地处理系统重启。如果系统终止了您的服务,它会在资源再次可用时立即重新启动它(尽管这也取决于您从onStartCommand()返回的值,如后面所述)。有关系统何时可能销毁服务的更多信息,请参阅“进程和线程”文档。
答案 1 :(得分:0)
我可能会离开这里,但似乎你的服务被杀死然后(稍后)重启。为什么不将实例化内容移动到onCreate()
?