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>* <params, progress, result></code>
<code>* params: 创建当前异步任务时需要传入的参数,一般为void</code>
<code>* progress: 更新异步任务进度时,需要调用publishprogress(progress)方法,progress就是参数类型</code>
<code>* result:异步任务的返回参数类型</code>
<code>* * */</code>
<code>class myasynctask extends asynctask<void,integer,boolean> {</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对象关闭。