Android之Thread与Service

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中保持与服务器的长连接。

时间: 2024-11-05 12:19:33

Android之Thread与Service的相关文章

Android 轮询之 Service + AlarmManager+Thread (转)

android中涉及到将服务器中数据变化信息通知用户一般有两种办法,推送和轮询. 消息推送是服务端主动发消息给客户端,因为第一时间知道数据发生变化的是服务器自己,所以推送的优势是实时性高.但服务器主动推送需要单独开发一套能让客户端持久连接的服务端程序,不过现在已经有很多开源的代码实现了基于xmmp协议的推送方案,而且还可以使用谷歌的推送方案.但有些情况下并不需要服务端主动推送,而是在一定的时间间隔内客户端主动发起查询. 譬如有这样一个app,实时性要求不高,每天只要能获取10次最新数据就能满足要

android开发之MediaPlayer+Service MP3播放器

http://blog.csdn.net/zzy916853616/article/details/6450753 [java] view plaincopy import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.apps.service.Player

Android Binder进程间通信---注册Service组件---发送和处理BC_REPLY返回协议

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra

Thread和Service应用场合的区别

Thread和Service的区别: 1) Thread 是程序执行的最小单元,它是分配CPU的基本单位,可以用 Thread 来执行一些异步的操作. 如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的.如果是Remote Service,那么对应的 Service 则是运行在独立进程的main 线程上.因此 Service不是线程! 2) Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后

Android Binder进程间通信---注册Service组件---发送和处理BC_TRANSACTION

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra

Android Binder进程间通信---注册Service组件---启动Binder线程池

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra

Android 属性系统 Property service 设定分析 (转载)

转自:http://blog.csdn.net/andyhuabing/article/details/7381879 Android 属性系统 Property service 设定分析 在Window中有个注册表的东东,可以存储一些类似key:value的 键值对,而在android平台上也有类似的机制叫做属性服务(Property service)进行初始化,设置及修改和查询的功能,adb shell命令使用 setprop 及 getprop 可以看到. 问题: SurfaceFling

Android笔记二十七.Service组件入门(一).什么是Service?

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Service 1.Service简介 Service为Android四大组件之一,Service与Activity组件相似,都代表可执行的程序且有自己的生命周期,唯一的区别是Activity组件提供界面方便人机交互而Service只在后台运行且没有交互界面.Service是android 系统中的一种组件,它们都是从Context派生出来的,但是它不能自己运行,只能在后台运行,并且可以和其

Android -- 利用Broadcast开启Service

Broadcast和Service都是Android四大组建之一的. 这里的广播是动态的,自己注册的一个广播. 这种最典型的用法就是利用开机广播,然后再起自己的服务,也就是在Android手机中做到开启启动. Service与Broadcast                                                                 public class MyService extends Service { private MyReceiver rec