A binding service is a service that is used locally in Android, where clients and services work in the same process and do not require cross-process operations. The client creates an association with the service through the Bindservice method
The following example shows how the client invokes the service's Get Time method
1. Create a binding service
First create the service,
The service creates an inner class Timebinder, inherits the binder, returns the service instance through the Onbind callback,
Creates a public method of getting time in the service for the client to invoke
Package Com.example.helloword;import Java.text.simpledateformat;import Java.util.date;import android.app.Service; Import Android.content.componentname;import Android.content.intent;import android.content.ServiceConnection; Import Android.os.binder;import Android.os.ibinder;public class Bindservice extends Service {private final IBinder Binder= new Timebinder ();//Create an internal binding class public class Timebinder extends Binder {bindservice getService () {//Re Turn this instance of LocalService so clients can call public methods return bindservice.this; }} @Overridepublic IBinder Onbind (Intent arg0) {//TODO auto-generated method Stubreturn Binder;}/* Only executed once at creation time */@ Override public void OnCreate () {super.oncreate (); */* @Override public void OnDestroy () {Super.ondestroy () when disconnecting or stopservice; *//@Override public void Onrebind (Intent Intent) {super.onrebind (Intent) when new attempt binding is performed; } @Override public void OnStart (Intent Intent, int startid) {Super.onstart (Intent, Startid); } @Override public boolean onunbind (Intent Intent) {return super.onunbind (Intent); }/*, each time the StartService executes the method, the OnStart () method is automatically executed when the method executes */@Override public int Onstartcommand (Intent Intent, int Flags, int startid) {return Super.onstartcommand (intent, flags, Startid); }//Get Time public String Getcurtime () {//date format SimpleDateFormat format = new SimpleDateFormat ("Yyyy-mm-dd h:m:s");D ate dat E = new Date (); return Format.format (Date.gettime ());}}
2. Invoking the binding service
On the client side, bind the service through Bindservice
<?xml version= "1.0" encoding= "Utf-8"? ><linearlayout xmlns:android= "http://schemas.android.com/apk/res/ Android " android:layout_width=" match_parent " android:layout_height=" match_parent " android:o rientation= "vertical" > <button android:id= "@+id/btngettime" android:layout_width= "Wrap_ Content " android:layout_height=" wrap_content " android:text=" Get Time "/> <textview android:id = "@+id/tvtime" android:layout_width= "262DP" android:layout_height= "wrap_content" android:text= " TextView "/></linearlayout>
The client rewrites the Serviceconnection two methods.The onserviceconnected system calls this to pass the IBinder returned in the service Onbind onservicedisconnected () was accidentally lost in connection with the system, call this
Package Com.example.helloword;import Com.example.helloword.bindservice.timebinder;import android.app.Activity; Import Android.content.componentname;import Android.content.context;import Android.content.intent;import Android.content.serviceconnection;import Android.os.bundle;import Android.os.ibinder;import Android.view.View; Import Android.view.view.onclicklistener;import Android.widget.button;import Android.widget.textview;public class Bindserviceactivity extends Activity {private Button btntime;//get time private TextView tvtime;//Show time Bindservice Bindserv Ice; @Overrideprotected void OnCreate (Bundle savedinstancestate) {//TODO auto-generated method Stubsuper.oncreate ( Savedinstancestate); Setcontentview (r.layout.bindservicelayout); Btntime= (Button) Findviewbyid (R.id.btngettime); Tvtime= (TextView) Findviewbyid (r.id.tvtime); Btntime.setonclicklistener (new Onclicklistener () {@Overridepublic void OnClick (View arg0) {//TODO auto-generated method Stubtvtime.settext (Bindservice.getcurtime ());}});} @OvErride protected void OnStart () {Super.onstart (); Bind to LocalService Intent Intent = new Intent (this, bindservice.class); Bindservice (Intent, mconnection, context.bind_auto_create); }private serviceconnection mconnection = new Serviceconnection () {@Override public void onserviceconnected ( ComponentName ClassName, IBinder service) {//We ' ve bound to LocalService, cast the IBinder and Get LocalService instance Timebinder binder = (timebinder) service; Bindservice=binder.getservice (); } @Override public void onservicedisconnected (ComponentName arg0) {bindservice=null; } }; }
Androidmanifest.xml
<activity android:name= "com.example.helloword.BindServiceActivity" > <intent-filter> < Action android:name= "Android.intent.action.MAIN"/> <category android:name= " Android.intent.category.LAUNCHER "/> </intent-filter> </activity> <service Android:name= ". Bindservice "> <intent-filter> <action android:name=" Com.example.helloword.BindService "/> <category android:name= "Android.intent.category.default"/> </intent-filter>
. NET programmer play to Android development---() Android binding service