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()进去!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值