学习路线ide
https://my.oschina.net/quguangle/blog/791697学习
3.1 Service的类型spa
3.2 详细介绍.net
(本地服务)http://www.jianshu.com/p/e04c4239b07e线程
(远程服务)http://www.jianshu.com/p/34326751b2c6code
之因此有很多人会把它们联系起来,主要由于Service的后台概念blog
后台的定义:后台任务运行彻底不依赖UI,即便Activity被销毁,或者程序被关闭,只要进程还在,后台任务就能够继续运行生命周期
其实两者存在较大的区别,以下图:进程
通常来讲,会将Service和Thread联合着用,即在Service中再建立一个子线程(工做线程)去处理耗时操做逻辑,以下代码:内存
@Override public int onStartCommand(Intent intent, int flags, int startId) { //新建工做线程 new Thread(new Runnable() { @Override public void run() { // 开始执行后台任务 } }).start(); return super.onStartCommand(intent, flags, startId); } class MyBinder extends Binder { public void service_connect_Activity() { //新建工做线程 new Thread(new Runnable() { @Override public void run() { // 执行具体的下载任务 } }).start(); } }
@Override public int onStartCommand(Intent intent, int flags, int startId) { return int; }
参数flags默认状况下是0,对应的常量名为START_STICKY_COMPATIBILITY。当Service由于内存 不足而被系统kill后,接下来将来的某个时间内,当系统内存足够可用的状况下,系统将会尝 试从新建立此Service,但不保证服务被Kill后必定能重启。
参数startId是一个惟一的整型,用于表示Activity(客户端)执行startService(...)的请求请 求标识,在屡次startService(...)的状况下,呈现0,1,2....递增。
返回值具体的可选值及含义以下:
START_NOT_STICKY(非粘性):当Service由于内存不足而被系统kill后,接下来将来的某个时间 内,即便系统内存足够可用,系统也不会尝试从新建立此Service。除非程序中Activity(客户 端)明确再次调用startService(...)启动此Service。
START_STICKY:当Service由于内存不足而被系统kill后,接下来将来的某个时间内,当系统内 存足够可用的状况下,系统将会尝试从新建立此Service,一旦建立成功后将回调 onStartCommand(...)方法,但其中的Inten是null,pendingintent除外。
START_REDELIVER_INTENT:与START_STICKY惟一不一样的是,回调onStartCommand(...)方法时, 其中的Intent将是非空,将是最后一次调用startService(...)中的intent。