四大组件---Service

                                       Service

学习路线ide

1. 基础知识

  • 定义:服务,属于Android中的计算型组件
  • 做用:提供须要在后台长期运行的服务(如复杂计算、下载等等)
  • 特色:长生命周期的、没有用户界面、在后台运行

2. 生命周期方法详解

https://my.oschina.net/quguangle/blog/791697学习

3. Service分类

3.1 Service的类型spa

3.2 详细介绍.net

4. Service的使用解析

(本地服务)http://www.jianshu.com/p/e04c4239b07e线程

(远程服务)http://www.jianshu.com/p/34326751b2c6code

5. 使用场景

  • 经过上述描述,你应该对Service类型及其使用很是了解;
  • 那么,咱们该何时用哪一种类型的Service呢?
  • 各类Service的使用场景请看下图:

6. 其余思考

6.1 Service和Thread的区别

  • 结论:Service和Thread之间没有任何关系
  • 之因此有很多人会把它们联系起来,主要由于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();  
    }  

}

6.2 Service和IntentService的区别

7.对onStartCommand参数的讲解

@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。

相关文章
相关标签/搜索