为什么我的LocationListener变为null?

时间:2010-01-28 10:47:16

标签: android location locationmanager locationlistener

我遇到的问题是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) 

我不知道为什么听众会毫无理由地变为空。请问你能告诉我哪里出错了!

2 个答案:

答案 0 :(得分:1)

Android系统将仅在内存不足时强制停止服务,并且必须为具有用户焦点的活动恢复系统资源。如果服务绑定到具有用户焦点的活动,则它不太可能被杀死,并且如果声明服务在前台运行(稍后讨论),那么它几乎永远不会被杀死。否则,如果服务已启动且长时间运行,则系统将随着时间的推移降低其在后台任务列表中的位置,并且该服务将极易受到查杀 - 如果您的服务已启动,则必须将其设计为优雅地处理系统重启。如果系统终止了您的服务,它会在资源再次可用时立即重新启动它(尽管这也取决于您从onStartCommand()返回的值,如后面所述)。有关系统何时可能销毁服务的更多信息,请参阅“进程和线程”文档。

答案 1 :(得分:0)

我可能会离开这里,但似乎你的服务被杀死然后(稍后)重启。为什么不将实例化内容移动到onCreate()