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對象關閉。