[Android學習]Android服務之Service(2)--綁定本地Service

來源:互聯網
上載者:User

再上一篇部落格中,簡單的介紹了Service的用法,也就是Service的啟動與關閉。不過,當程式通過startService()和stopService()啟動、關閉Service時,Service與訪問者之間基本上不存在太多的關聯,因此Service與訪問者之間無法進行通訊、資料交換。就如同平時我們寄信,當信寄出去後,我們無法得到信是否送達、在送信過程中的狀況等等,當我們想得到這些資訊時,也就是當我們想Service與訪問者之間進行方法調用以及資料交換時,就應該用到bindService()和unbindService()方法來啟動、關閉Service。

 

Context的bindService()方法的完整命名為:bindService(Intent service,ServiceConnection conn,int flags)

service:該參數通過Intent指定要啟動的Service

conn:該參數是一個ServiceConnection對象,該對象用於監聽訪問者與Service之間的串連狀態。當訪問者訪問者與Service之間串連成功時將回調該ServiceConnection對象的onServiceConnected(ComponentName name,Ibinder service)方法;當Service所在的宿主進程由於異常中止或其他原因終止,導致該Service與訪問者之間中斷連線時回調該ServiceConnection對象的onServiceDisconnected(ComponentName name)方法。

flags:指定綁定時是否主動建立Service(如果Service還未建立)。該參數可以是0(不自動建立)或BIND_AUTO_CREATE(自動建立).

------當調用者主動通過unBindService方法斷開與Service的串連時,ServiceConnection對象的onServiceDisconnected(ComponentName name)方法不會被調用。

 

在ServiceConnection對象的onServiceConnected方法中有一個Ibinder對象,該對象即可實現與被綁定Service之間的通訊。

 

下面的例子示範了如何在Activity中綁定本地Service,並擷取Service的啟動並執行狀態,即與Service通訊。

BinderService.java:

 

package com.ye_yun_lin.binderserviceactivity;import android.R.integer;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class BinderService extends Service{private int count;private boolean quit;private MyBinder myBinder=new MyBinder();public class MyBinder extends Binder{public int getcount(){return count;}}@Overridepublic IBinder onBind(Intent intent) {System.out.println("Service is binded");return myBinder;}@Overridepublic void onCreate() {super.onCreate();System.out.println("Service is created");new Thread(){@Overridepublic void run() {while (!quit) {try {Thread.sleep(1000);} catch (Exception e) {}count++;}}}.start();}@Overridepublic void onDestroy() {super.onDestroy();this.quit=true;System.out.println("Service is Destroyed");}@Overridepublic boolean onUnbind(Intent intent) {System.out.println("Service is unbinded");return super.onUnbind(intent);}}

配置Service:

 

 

                                                        

MainActivity.java:

 

 

package com.ye_yun_lin.binderserviceactivity;import android.os.Bundle;import android.os.IBinder;import android.app.Activity;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {private Button bindButton,unbindButton,buttonStatusButton;BinderService.MyBinder binder;private ServiceConnection conn=new ServiceConnection() {//當該Activity與Service中斷連線時回調該方法@Overridepublic void onServiceDisconnected(ComponentName name) {System.out.println("--Service Didconnected--");}//當該Activity與Service串連成功時回調該方法@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {System.out.println("--Service Connected--");binder=(BinderService.MyBinder) service;}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindButton=(Button)findViewById(R.id.bindservice);unbindButton=(Button)findViewById(R.id.unbindservice);buttonStatusButton=(Button)findViewById(R.id.servicestatus);final Intent intent=new Intent();intent.setAction("com.ye_yun_lin.binderserviceactivity.BinderService.local");bindButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {bindService(intent, conn, Service.BIND_AUTO_CREATE);}});unbindButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {unbindService(conn);}});buttonStatusButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "Service的count值為:"+binder.getcount(), Toast.LENGTH_SHORT).show();}});}}

結果:

 

通過上面兩個例子,我們可以得到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.