Hi all。
一直不了解service和线程的区别,网上都说生命周期不一样,我在application里开的线程生命周期就跟app一致了,和在service里开线程效果一样啊,作为四大组件之一的service就这么水吗?其实不然,有时我们可能需要app被杀死但不希望某些任务被中断,如下载文件,下面我们进行分析。(这里谈的是本地服务,远程服务运行在不同进程就不多说了)
有时我们查看有什么程序正在运行的时候会看到如下所示的
这时,会有疑惑,为什么进程都没了,服务还在,难道服务和app不在同个进程?
首先,在设置-应用里看到的一项代表一个进程,所以这里显示在同一行的进程和服务是在同一个进程里。但这里显示的是这个app占用的进程数,app被杀死后,该服务独占了整个进程,所以这里就有了上图的情况。
对service不是十分了解的人会说,service不是在app里启动的吗?为什么app死了,服务还在?
service有两种启动方式,一种用startservice、另一种是bindservice。前者启动之后是独立于app运行的,只要没有主动停止该服务,就会一直运行,直到被主动停止或系统回收。后者通过绑定形式启动,生命周期跟被绑定的组件一致。
在application里开线程里做耗时任务是可以脱离activity的生命周期,但有时避免不了app被用户杀掉,但某些重要数据还没来得及保存的情况,这时我们可以把一些重要的信息放到service里进行保存操作,操作完成后再停掉service。