Android----service服务

来源:互联网 发布:js拼图游戏源码 编辑:程序博客网 时间:2024/06/10 08:25
一.线程和进程
进程:
是一块独立内存控件,专门为某个应用程序去开辟的,进程中可以有多个线程.
线程:是存在进程中,每个线程都会有自己的进程.

进程与线程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
4)二者均可并发执行. 

在一个应用程序启动时候,如果没有其他的组件正在运行着,那么 安卓系统会创建一个 linux 的进程这个进程中,运行着这个组件.    

进程的生命周期:安卓系统会尽可能让一个应用程序的进程保持尽可能的长的时间...  但是最终也会去移除一些老的进程去回收内存空间,以便于一些

新的进程或者更加重要的进程可以启动...


进程的5种级别,从高到底,如下:
        1.前台进程(--- foreground process):一个应用程序启动了,处于前台,可以直接响应用户的点击触摸事件(获得焦点的状态), 那么这个时候就是属于前台进程. 
        2.可视进程(------ visible process):一个应用程序启动了, 不能直接去响应用户的点击触摸事件,但是仍然可以看得见那么这个应用程序的进程就是属于可视进程. 

        3.服务进程(----- service process):一个程序退出了但是 仍热有一个服务在后台一直运行着这个时候这个应用程序的进程就是属于服务进程.
        4.后台进程(---- background process):一个应用程序启动内部没有服务在运行只有activity运行着,然后点击了最小化那么这个时候应用程序就是属于后台进程.
        5.空进程(--- empty process):一个应用层启动,又正常的退出了没有任何其他的组件正在运行着那么这个时候这个进程就是属于空进程.

 

二.开启服务的生命周期:
onCreate():创建服务的时候调用;
onStartCommand():收到开启服务的命令的时候调用;
onDestroy():停止服务的时候调用;
onBlind():绑定服务的时候调用
onUnblind():解绑服务的时候调用

开启服务的时候,服务的生命周期如下:

1. 开启服务那么首先会创建服务的对象.  Oncreate执行然后onstartCommand 执行 .

2. 服务就一直在后台运行着干你想干的事儿..

3. 直到停止服务服务才销毁...


在开启服务的时候服务只能被开启一次重复去开启服务服务对象并不会新创建停止服务只会销毁服务对象一次.重复开启只会去重复调用 onstartCommand  , 并不会让服务重新创建.    


三.绑定服务的生命周期:
内存溢出(out of memory):内存不够用时,直接oom异常
内存泄漏(memory leak):在释放资源的时候,没有将必要的资源给关闭释放掉,就会出现内存泄漏

绑定服务的生命周期如下:


四:开启服务和绑定服务的区别:
开启服务:服务开启后一直在后台运行着,与Activity是否存在无关
绑定服务:可以去调用服务中的方法,开启服务的Activity销毁了,则这个绑定的服务也销毁了


五.编写一个服务的具体步骤:

第一步:

    写个类去继承 Service ,并且重写 onCreate方法,  是服务在创建的时候会调用的方法 可以在oncreate中去

    干耗时的事儿但是这个耗时的事必须运行在子线程中

第二步:

   在清单文件中进行注册. 

第三步:

 某个地方,执行代码的时候,去启动服务

   点击一个按钮后,去开启服务

  1. Intent intent =newIntent();
  2. intent.setClass(this,HelloService.class);
  3. //启动服务
  4. startService(intent);


注意点
:

1. 服务也是运行在主线程中,所以服务所在的线程不能被阻塞如果要干耗时的事儿必须写到子线程中

2. 服务与activity的类似的,只不过服务没有界面



原创粉丝点击