這篇文章主要介紹安卓中Service組件怎么用,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)絡(luò)營銷、企業(yè)網(wǎng)站建設(shè),買鏈接,一元廣告為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計(jì)到用戶體驗(yàn)提高,創(chuàng)新互聯(lián)力求做到盡善盡美。1:Service的創(chuàng)建
Service就是服務(wù)的意思,它的特點(diǎn)就是當(dāng)你開啟服務(wù)以后即使你關(guān)閉app它也在運(yùn)行,直到調(diào)用停止服務(wù)的方法。典型的用法就是音樂播放器。
Service的創(chuàng)建同Activity一樣最好不要自己繼承寫類。創(chuàng)建方法為自己項(xiàng)目右鍵->new->other->Android Object->然后一直下一步就可以了(中間有取類名可以自行更改)
2:Service的生命周期
Service的生命周期有2種一種是開啟服務(wù)和綁定服務(wù)。大家看上圖就可以一目了然。
3:啟動(dòng)和綁定服務(wù)以及關(guān)閉服務(wù)
首先是第一種啟動(dòng)服務(wù),使用一個(gè)按鈕并在其監(jiān)聽事件里啟動(dòng)服務(wù),代碼如下
//第一個(gè)按鍵啟動(dòng)服務(wù) findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service = new Intent(); //設(shè)置跳轉(zhuǎn)到的服務(wù) service.setClass(MainActivity.this, MyService.class); //啟動(dòng)服務(wù) startService(service ); } }); //第二個(gè)按鍵關(guān)閉服務(wù) findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stopService(service); } });
當(dāng)啟動(dòng)服務(wù)以后如果在啟動(dòng)只會(huì)調(diào)用onStartCommand方法,不會(huì)再新建一個(gè)服務(wù)對象(構(gòu)造方法只執(zhí)行一次)。如下圖所示
正常的啟動(dòng)結(jié)束服務(wù)打的日志圖如下(被水印遮住了蛋疼。。我源代碼會(huì)上傳大家可以自己驗(yàn)證)
然后是第二種綁定服務(wù),方法跟上面類似,代碼如下
//第三個(gè)按鍵綁定服務(wù) findViewById(R.id.button3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service = new Intent(); //設(shè)置跳轉(zhuǎn)到的服務(wù) service.setClass(MainActivity.this, MyService.class); //啟動(dòng)服務(wù) bindService(service, null, Context.BIND_AUTO_CREATE); } }); //第四個(gè)按鍵解綁服務(wù) findViewById(R.id.button4).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unbindService(null); } });
綁定服務(wù)方法的運(yùn)行順序如下(如生命周期所示)
4:動(dòng)態(tài)的訪問Service的方法
剛才我啟動(dòng)綁定服務(wù)方法時(shí)候中間那個(gè)參數(shù)為null,現(xiàn)在我們來為它傳入一個(gè)參數(shù)(由于要傳入的對象是一個(gè)接口所以必須重寫它的方法)
private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { } }; findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent service = new Intent(MainActivity.this, MyService.class); bindService(service , conn , Context.BIND_AUTO_CREATE); } });
回到Service的代碼頁面,在Service中寫一個(gè)play方法并打日志以便我們觀看結(jié)果,然后寫一個(gè)內(nèi)部類繼承binder并寫一個(gè)方法來調(diào)用Service的play()方法,最后在onbind方法返回一個(gè)binder對象
@Override public IBinder onBind(Intent intent) { return new MyBinder(); } class MyBinder extends Binder { public void start() { play(); } } public void play() { Log.e("MyService", "play()"); }
在回到Activity代碼,在conn接口中的onServiceConnected()方法中獲取Mybinder對象,在調(diào)用對象的start()方法,代碼如下
private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { //獲取Service中的Mybinder的對象 MyBinder binder = (MyBinder) service; //調(diào)用Mybinder中的方法,里面就包含了Service中的方法 binder.start(); };
大功告成。日志打印結(jié)果如下
以上是“安卓中Service組件怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。