一 什麼是service
二 如何使用service
三service的生命週期
一 什麼是service
二 如何使用service
package jason.tutorial;
import android.content.intent;
import android.os.binder;
import android.os.ibinder;
import android.util.log;
public class testservice extends service
public class localbinder extends binder
}@override
public boolean onunbind(intent i)
@override
public void onrebind(intent i)
@override
public void oncreate()
@override
public void onstart(intent intent, int startid)
@override
public void ondestroy()
private void shownotification()
}
public class localbinder extends binder
}
這個方法是為了讓呼叫者得到這個service並操作它。
service本身就這樣簡單了,你需要做什麼就在oncreate和onstart裡做好了,起個執行緒什麼的。
再看一下它的呼叫者,testserviceholder
package jason.tutorial;
import android.content.componentname;
import android.content.context;
import android.content.intent;
import android.content.serviceconnection;
import android.os.bundle;
import android.os.ibinder;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.toast;
public class testserviceholder extends activity
private serviceconnection connection = new serviceconnection()
public void onservicedisconnected(componentname classname)
};private void initbuttons()
});button buttonstop = (button) findviewbyid(r.id.stop_service);
buttonstop.setonclicklistener(new onclicklistener()
});button buttonbind = (button) findviewbyid(r.id.bind_service);
buttonbind.setonclicklistener(new onclicklistener()
});button buttonunbind = (button) findviewbyid(r.id.unbind_service);
buttonunbind.setonclicklistener(new onclicklistener()
});}private void startservice()
private void stopservice()
private void bindservice()
private void unbindservice()
}}
這裡可以看到兩種啟動方法,start和bind,當然都是通過intent呼叫的,在intent中指明要啟動的service的名字,stop也一樣
private void startservice()
private void stopservice()
對於bind的話,需要乙個serviceconnection物件
private serviceconnection connection = new serviceconnection()
public void onservicedisconnected(componentname classname)
};
用來把activity和特定的service連線在一起,共同存亡,具體的生命週期細節下一段來講。
三 service的生命週期
service的生命週期方法比activity少一些,只有oncreate, onstart, ondestroy
我們有兩種方式啟動乙個service,他們對service生命週期的影響是不一樣的。
1 通過startservice
service會經歷 oncreate -> onstart, stopservice的時候直接ondestroy
如果是呼叫者(testserviceholder)自己直接退出而沒有呼叫stopservice的話,service會一直在後台執行。
下次testserviceholder再起來可以stopservice。
2 通過bindservice
service只會執行oncreate, 然後會有onbind,這個時候 testserviceholder 和testservice繫結在一起
testserviceholder 退出了,srevice就會呼叫onunbind->ondestroyed ,所謂繫結在一起就共存亡了。
那有同學問了,要是這幾個方法交織在一起的話,會出現什麼情況呢?
乙個原則是service的oncreate的方法只會被呼叫一次,就是你無論多少次的startservice又 bindservice,service只被建立一次。如果先是bind了,那麼start的時候就直接執行service的onstart方法,如果先 是start,那麼bind的時候就直接執行onbind方法。如果你先bind上了,就stop不掉了,對啊,就是stopservice不好使了,只 能先unbindservice, 再stopservice,所以是先start還是先bind行為是有區別的。
大家有興趣可以回去點點按鈕看看log,多看幾遍log就知道了。
安卓之service簡單介紹
一 什麼是service 二 如何使用service 三service的生命週期 一 什麼是service 二 如何使用service package jason.tutorial import android.content.intent import android.os.binder impo...
安卓開發 service 簡介
service的生命週期方法比activity少一些,只有oncreate,onstartcommand,ondestroy 我們有兩種方式啟動乙個service,他們對service生命週期的影響是不一樣的。1 通過startservice service會經歷 startservice oncr...
安卓四大元件之 service
服務 長期後台執行的沒有介面的activity,程式寫法和activity類似。安卓系統程序管理是按照一定規則的 1.預設情況下,關閉掉乙個應用程式,清空了這個應用程式的任務棧,應用程式的程序還會保留。因為手機記憶體較小,方便下次快速啟動應用程式,但是也會帶來記憶體不足的問題。2.安卓系統有一套記憶...