Android開發之bindService()偵聽service內部狀態

來源:互聯網
上載者:User

標籤:

Android開發之bindService()通訊的基礎上,實現bindService()方法偵聽service內部狀態。

實現偵聽service內部狀態,使用的是回調機制

1.首先實現一個介面

1     public static  interface CallBack{2         void onDataChange(String data);3     }

2.

1     private CallBack callBack=null;2     public void setCallBack(CallBack callBack) {3         this.callBack = callBack;4     }5     public CallBack getCallBack() {6         return callBack;7     }

3.

 1     @Override 2     public void onCreate() { 3         // TODO Auto-generated method stub 4         super.onCreate(); 5         running=true; 6         new Thread(){ 7             public void run() { 8                 int i=0; 9                 while (running) {10                     i++;11                     String str=i+":"+data;12                     Log.d("learnservice", str);13                     if (callBack!=null) {      14                         callBack.onDataChange(str);           15                     }16                     try {17                         sleep(1000);18                     } catch (InterruptedException e) {19                         // TODO Auto-generated catch block20                         e.printStackTrace();21                     }22                 }23             };24         }.start();25     }

4.MyBinder提供方法返回BindService執行個體。

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

5.

 1         @Override 2         public void onServiceConnected(ComponentName name, IBinder service) { 3             // TODO Auto-generated method stub 4             binder=(MyBinder) service; 5             binder.getService().setCallBack(new MyService.CallBack() { 6                  7                 @Override 8                 public void onDataChange(String data) { 9                     // TODO Auto-generated method stub10                     Message msg=new Message();11                     Bundle bundle=new Bundle();12                     bundle.putString("data", data);13                     msg.setData(bundle);14                     handler.sendMessage(msg);15                 }16             });17         }18     };

6.通過handler,把data放到UI線程,並更新UI線程

1     private Handler handler=new Handler(){2         public void handleMessage(android.os.Message msg) {3             tvOut.setText(msg.getData().getString("data"));4         };5     };

 

Android開發之bindService()偵聽service內部狀態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.