您好,登錄后才能下訂單哦!
這篇文章主要介紹安卓中Service組件怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
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:啟動和綁定服務(wù)以及關(guān)閉服務(wù)
首先是第一種啟動服務(wù),使用一個按鈕并在其監(jiān)聽事件里啟動服務(wù),代碼如下
//第一個按鍵啟動服務(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); //啟動服務(wù) startService(service ); } }); //第二個按鍵關(guān)閉服務(wù) findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stopService(service); } });
當(dāng)啟動服務(wù)以后如果在啟動只會調(diào)用onStartCommand方法,不會再新建一個服務(wù)對象(構(gòu)造方法只執(zhí)行一次)。如下圖所示
正常的啟動結(jié)束服務(wù)打的日志圖如下(被水印遮住了蛋疼。。我源代碼會上傳大家可以自己驗(yàn)證)
然后是第二種綁定服務(wù),方法跟上面類似,代碼如下
//第三個按鍵綁定服務(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); //啟動服務(wù) bindService(service, null, Context.BIND_AUTO_CREATE); } }); //第四個按鍵解綁服務(wù) findViewById(R.id.button4).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unbindService(null); } });
綁定服務(wù)方法的運(yùn)行順序如下(如生命周期所示)
4:動態(tài)的訪問Service的方法
剛才我啟動綁定服務(wù)方法時候中間那個參數(shù)為null,現(xiàn)在我們來為它傳入一個參數(shù)(由于要傳入的對象是一個接口所以必須重寫它的方法)
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中寫一個play方法并打日志以便我們觀看結(jié)果,然后寫一個內(nèi)部類繼承binder并寫一個方法來調(diào)用Service的play()方法,最后在onbind方法返回一個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)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。