Android 停止Service

一.今天做基站信息,整了整個上午,不論是用context.stopService(service)還是service.this.stopself(),服務總是停不了,最後發現了問題根源,停止服務的時候一定要把其中有關的線程或監聽器也停止掉!!!

1.比如在我的寫入文件的Service中,存在這麼個計時器

updateDataTask = new TimerTask(){
@Override
public void run() {
向文件中存數據
}
}; 
timer = new Timer();
timer.schedule(updateDataTask, 10*1000, 10*1000);

它每隔10秒鐘就寫入文件中一次,即使你調用了context.stopService(service),也調用了服務中的destory()函數,但是每隔十秒鐘timer還是會請求,服務又自啓了。

2.還比如在我的監聽信號強度的Service中,一開始註冊了監聽函數

telMgr.listen(phoneLis, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

它是實時監聽的,到最後服務中的destory()函數中一定要停止

telMgr.listen(phoneLis, PhoneStateListener.LISTEN_NONE);

3.在我的定位的Service中,起初private LocationClient mLocClient;

mLocClient = new LocationClient(getApplicationContext());

mLocClient.start();

最後服務中的destory()函數中一定要mLocClient.stop();

二.有關Timer

注意timer.cancel()執行後

Timer.cancel()不但結束當前schedule,連整個Timer的線程都會結束掉 所以不能再調用schedule 只能new一個新的再執行

三.無關界面時updateDataTask = new TimerTask(){
@Override
public void run() {
向文件中存數據
}
}; 
timer = new Timer();
timer.schedule(updateDataTask, 10*1000, 10*1000);

可以直接用,有關界面時一定要用handler和Runnable。Runnable裏面寫需要做的任務,在task裏面用handler.post()進去!

發佈了51 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章