android的四大组件之一Service(服务的绑定)
怎么绑定服务,又怎么解除服务,代码如下:
MainActivity.java源码:
package com.example.lesson14_binder; 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; /** * 2013-6-18 下午2:22:00 * * @author 乔晓松 */ public class MainActivity extends Activity { public MyService myService; // 内部类获取连接对象 public ServiceConnection conn = new ServiceConnection() { // 连接失败后调用的方法 @Override public void onServiceDisconnected(ComponentName name) { myService = null; System.out.println("-----service Faild"); } // 连接成功后调用的方法 @Override public void onServiceConnected(ComponentName name, IBinder service) { myService = ((MyService.MyBinder) service).getService(); System.out.println("-----service connection"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 绑定服务 public void bindService(View v) { Intent serviceIntent = new Intent(this, MyService.class); this.bindService(serviceIntent, conn, Context.BIND_AUTO_CREATE); System.out.println("---------bindService"); } // 解除绑定 public void unBindService(View v) { this.unbindService(conn); System.out.println("---------unBindService"); } }
MyService.java源码:
package com.example.lesson14_binder; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; /** * 2013-6-18 下午2:16:37 * * @author 乔晓松 */ public class MyService extends Service { public MyBinder myBinder = new MyBinder(); // 绑定的时候执行 @Override public IBinder onBind(Intent intent) { System.out.println("------onBind"); return myBinder; } // 重新绑定的时候执行 @Override public void onRebind(Intent intent) { super.onRebind(intent); System.out.println("------onRebind"); } // 解除绑定的时候执行 @Override public boolean onUnbind(Intent intent) { System.out.println("------onUnbind"); return super.onUnbind(intent); } // 创建服务的时候执行 @Override public void onCreate() { super.onCreate(); System.out.println("------onCreate"); } // 开启服务的时候执行 @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("------onStartCommand"); return super.onStartCommand(intent, flags, startId); } // 销毁服务的时候执行 @Override public void onDestroy() { super.onDestroy(); System.out.println("------onDestroy"); } // 继承绑定类的内部类 public class MyBinder extends Binder { public MyService getService() { return MyService.this; } } }
布局文件的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginTop="59dp" android:onClick="bindService" android:text="@string/btn_start" /> <Button android:id="@+id/btn_end" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btn_start" android:layout_alignRight="@+id/btn_start" android:layout_below="@+id/btn_start" android:layout_marginTop="58dp" android:onClick="unBindService" android:text="@string/btn_end" /> </RelativeLayout>