Android 停止Service

来源:互联网 发布:java抽象类的特点 编辑:程序博客网 时间:2024/06/04 20:49

一.今天做基站信息,整了整个上午,不论是用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()进去!

0 0