2010-01-28 37 views
3

我在我的服务myService中遇到有关LocationListener的问题。为什么我的LocationListener变为null?

这里是我的代码:

///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) 

我不知道为什么监听器无理由变为空。请你能告诉我我哪里出错了!

+0

你是否手动将它设置为null在代码中的其他位置? – JRL 2010-01-28 11:01:47

+0

我确定不会将它设置为空。我认为服务重新启动,但我不明白当服务重新启动时它会执行哪部分代码。 – sheik 2010-02-01 05:48:25

回答

0

我可能在这里,但它似乎也许你的服务正在被杀死,然后(后来)重新启动。为什么不把实例化的东西移动到onCreate()

+0

感谢您的答复。请您简要介绍一下服务重启的原因/原因。 – sheik 2010-01-29 07:03:20

1

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