Android 開發之 bindService() 通信


Service 啟動方式有兩種

  • startService(intent)
  • bindService(intent,conn,Context.BIND_AUTO_CREATE)

startService(intent)

  生命周期: onCreate()-  >onStartCommand()->startService()->onDestroy()

  該方法啟動service,會執行一個onStartCommand()的方法,所以一些操作可以放在 onStartCommand() 中進行處理。

bindService(intent,conn,Context.BIND_AUTO_CREATE)

  生命周期:onCreate()->onBind()->onUnbind()->onDestroy()

  綁定啟動 service,

使用該方法啟動 service 分為幾步

1.在 Service 中,重寫 onBind() 方法,返回一個 iBinder 對象。

1     @Override
2     public IBinder onBind(Intent arg0) {
3         // TODO Auto-generated method stub
4         Log.d("learnservice", "綁定服務...");
5         return new MyBinder();
6     }

2.新建 BinderService 類繼承 Service ,在 BindService 類里新建內部類 MyBinder 繼承Binder ( Binder 實現 IBinder 接口)。該類中實現一些與 service 通信的方法,比如 setData()方法。

1     public class MyBinder extends Binder{
2         public void setData(String data){
3             MyService.this.data=data;
4         }
5     }

3.在 Activity 里,實例化 ServiceConnection 接口的實現類,重寫 onServiceConnected() 和 onServiceDisconnected() 方法。

 1 ServiceConnection conn=new ServiceConnection() {
 2         
 3         @Override
 4         public void onServiceDisconnected(ComponentName name) {
 5             // TODO Auto-generated method stub
 6             
 7         }
 8         
 9         @Override
10         public void onServiceConnected(ComponentName name, IBinder service) {
11             // TODO Auto-generated method stub
12             binder=(MyBinder) service;   //該binder,需要在activity中聲明。
13             Log.d("learnservice", "綁定服務conn...");
14         }
15     };

4.使用 button 的 onClick() 或者 activity 的 onCreat() 等觸發 bindService() 方法

1     @Override
2     public void onClick(View v) {
3         intent = new Intent(MainActivity.this,MyService.class);
4         bindService(intent, conn, Context.BIND_AUTO_CREATE);
5 }

5.在 activity 中聲明 service中的binder

1 private MyService.MyBinder binder;

6.同時把該 binder 放在 serviceConnection 的 onServiceConnection() 方法中

1 binder=(MyBinder) service;

這樣,就完成了 Activity 和 Service 通過 bindService() 方法綁定並通信。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM