Service还是Thread
Service用来执行长时间的后台任务,同时线程也可以执行后台任务,它们的不同是什么?
- Service的特点
1.默认情况下,Service是运行在主线程中,如果要执行长时间的耗时工作,应该在Service中再开一个Thread 来执行。
2.Service的优先级高于Activity,也高于Activity所开的Thread,所有在内存不足的情况下,不会轻易杀死Service,就算是杀死了,也会在资源可用的情况下再重启被杀死的Service。实际上,Thread只是一个用来执行后台工作的工具类,Service与Thread是两码事,我们不应该讨论他们的不同,而是应该讨论在什么地方创建Thread .
一般情况下,Thread可以在三个位置被创建,不同的位置,生命周期不同,所以我们应该根据该Thread的目标生命周期来决定是在Service中还是Activity中创建Thread.
- Thread在何处创建
1.在Activity中创建
这种情况下,在onCreate时创建,在onDestroy中销毁,否则Activity finish后,Thread还在后台运行。这种情况适合完成一些依赖于Activity本身有关的任务,如定时更新一下Activity的控件状态等。
2.在Application中创建
这里会自定义Application类,在onCreate方法中创建Thread,在onTerminate中销毁Thread,否则整个应用退出了,线程还在后台运行着。这种情况适合用来执行一些application级的任务,如在后台定时查看网络情况 等。
以上两种情况,Thread的生命周期都不应该超过整个Application的生命周期,APP退出后,Thread也应该结束,这样才不会出现MemoryLeak等。
如果希望在整个APP都退出后,依然可以运行该Thread,就应该将这个Thread放到Service中。
3.在Service中创建
只要Service不退出 ,Thread就不会结束,一般在Service的onCreate中创建,在onDestroy中销毁。
适合于执行一些独立于APP的后台任务,如在Service中保持与服务器的长连接。