您好,登錄后才能下訂單哦!
這篇文章主要介紹安卓中Service組件怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
1:Service的創建
Service就是服務的意思,它的特點就是當你開啟服務以后即使你關閉app它也在運行,直到調用停止服務的方法。典型的用法就是音樂播放器。
Service的創建同Activity一樣最好不要自己繼承寫類。創建方法為自己項目右鍵->new->other->Android Object->然后一直下一步就可以了(中間有取類名可以自行更改)
2:Service的生命周期
Service的生命周期有2種一種是開啟服務和綁定服務。大家看上圖就可以一目了然。
3:啟動和綁定服務以及關閉服務
首先是第一種啟動服務,使用一個按鈕并在其監聽事件里啟動服務,代碼如下
//第一個按鍵啟動服務 findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service = new Intent(); //設置跳轉到的服務 service.setClass(MainActivity.this, MyService.class); //啟動服務 startService(service ); } }); //第二個按鍵關閉服務 findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stopService(service); } });
當啟動服務以后如果在啟動只會調用onStartCommand方法,不會再新建一個服務對象(構造方法只執行一次)。如下圖所示
正常的啟動結束服務打的日志圖如下(被水印遮住了蛋疼。。我源代碼會上傳大家可以自己驗證)
然后是第二種綁定服務,方法跟上面類似,代碼如下
//第三個按鍵綁定服務 findViewById(R.id.button3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service = new Intent(); //設置跳轉到的服務 service.setClass(MainActivity.this, MyService.class); //啟動服務 bindService(service, null, Context.BIND_AUTO_CREATE); } }); //第四個按鍵解綁服務 findViewById(R.id.button4).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unbindService(null); } });
綁定服務方法的運行順序如下(如生命周期所示)
4:動態的訪問Service的方法
剛才我啟動綁定服務方法時候中間那個參數為null,現在我們來為它傳入一個參數(由于要傳入的對象是一個接口所以必須重寫它的方法)
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方法并打日志以便我們觀看結果,然后寫一個內部類繼承binder并寫一個方法來調用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對象,在調用對象的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; //調用Mybinder中的方法,里面就包含了Service中的方法 binder.start(); };
大功告成。日志打印結果如下
以上是“安卓中Service組件怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。