2010-01-28 35 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()返回的值,如後面討論的那樣)。有關係統何時可能銷燬服務的更多信息,請參閱進程和線程處理文檔。