安卓之service簡單介紹

2021-09-06 11:29:25 字數 3880 閱讀 9032

一 什麼是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.安卓系統有一套記憶...