天天看点

服务

1. 服务的概念

*服务运行于后台,其存在于所属应用的进程。当所属应用的进程被杀死,则服务也被杀死。

*服务并不会主动开启新线程执行任务,服务的所有代码都是默认由主线程执行。

*为了不阻塞主线程,服务中的具体任务需要手动创建子线程来执行。

2. 异步消息处理机制

异步消息处理机制需要使用的组件包括:message对象、handler对象(主线程和子线程共用一个对象)、messagequeue对象(一个线程

有唯一一个,自动创建)、looper((一个线程有唯一一个,自动创建)。

步骤:

在主线程创建handler对象,在子线程中创建message对象,并给message设定一些参数(what作为id、obj属性存对象等);

在子线程中根据业务需要调用handler对象的sendmessage()方法,将message对象存入到主线程的messagequeue对象中;

主线程的looper对象将messagequeue对象取出并调用handler对象的handlemessage()方法处理message对象。

3. 异步消息处理抽象类asynctask

<code>/**</code>

<code>* &lt;params, progress, result&gt;</code>

<code>* params: 创建当前异步任务时需要传入的参数,一般为void</code>

<code>* progress: 更新异步任务进度时,需要调用publishprogress(progress)方法,progress就是参数类型</code>

<code>* result:异步任务的返回参数类型</code>

<code>* * */</code>

<code>class myasynctask extends asynctask&lt;void,integer,boolean&gt; {</code>

<code>@override protected void onpreexecute() {</code>

<code>super.onpreexecute();</code>

4. 服务的创建、启动和停止

`public class mainactivity extends appcompatactivity implements view.onclicklistener {

private button startbtn, stopbtn, bindbtn,unbindbtn;

private string tag = "主活动";

private serviceconnection serviceconnection = new serviceconnection() {

@override

public void onserviceconnected(componentname name, ibinder service) {

log.d(tag,"绑定");

((myservice.mybinder)service).startdownload();

((myservice.mybinder)service).getprogress();

}`

+++++++++++++++++++++++++++++++

public class myservice extends service {

private string tag = "你的服务";

}

5. intentservice

业务逻辑写进intentservice的onhandleintent()方法中,这个方法会被自动新开的子线程执行。当方法执行完毕,子线程会自动执行销毁方法将intentservice对象关闭。