服务客户端(Activity):

  1. import android.app.Activity; 
  2. import android.content.ComponentName; 
  3. import android.content.Context; 
  4. import android.content.Intent; 
  5. import android.content.ServiceConnection; 
  6. import android.os.Bundle; 
  7. import android.os.IBinder; 
  8. import android.util.Log; 
  9. import android.view.Menu; 
  10. import android.view.View; 
  11. import android.view.View.OnClickListener; 
  12. import android.widget.Button; 
  13. import android.widget.Toast; 
  14.  
  15. public class MainActivity extends Activity { 
  16.  
  17.     private final String TAG = "ActivityBindLocalService"
  18.     private LocalService mLocalService; 
  19.     private boolean mIsBound; 
  20.     
  21.     @Override 
  22.     protected void onCreate(Bundle savedInstanceState) { 
  23.         super.onCreate(savedInstanceState); 
  24.         setContentView(R.layout.activity_main); 
  25.         
  26.         Button bindLocalService = (Button) findViewById(R.id.bind_local_service); 
  27.         bindLocalService.setOnClickListener(bindClickListener); 
  28.         Button unBindLocalService = (Button) findViewById(R.id.unBind_local_service); 
  29.         unBindLocalService.setOnClickListener(unBindOnClickListener); 
  30.         
  31.     } 
  32.     
  33.     private final OnClickListener bindClickListener = new OnClickListener() { 
  34.         
  35.         @Override 
  36.         public void onClick(View v) { 
  37.             doBindService(); 
  38.         } 
  39.     }; 
  40.     
  41.     private final OnClickListener unBindOnClickListener = new OnClickListener() { 
  42.         
  43.         @Override 
  44.         public void onClick(View v) { 
  45.             doUnBindService(); 
  46.         } 
  47.     }; 
  48.  
  49.     private void doBindService(){ 
  50.         //将此Activity和LocalService绑定,然后会执行ServiceConnection里面的onServiceConnected 
  51.         Log.i(TAG, "MainActivity ----> bindService"); 
  52.         bindService(new Intent(MainActivity.this, LocalService.class), 
  53.                 mServiceConnection, Context.BIND_AUTO_CREATE); 
  54.         mIsBound = true
  55.     } 
  56.     
  57.     private void doUnBindService(){ 
  58.         if (mIsBound) { 
  59.             //将此Activity和LocalService解除绑定,会直接执行LocalService的onDestory方法,将此Service销毁 
  60.             unbindService(mServiceConnection); 
  61.             mIsBound = false
  62.         } 
  63.     } 
  64.     
  65.     private final ServiceConnection mServiceConnection = new ServiceConnection() { 
  66.         
  67.         @Override 
  68.         public void onServiceDisconnected(ComponentName name) { 
  69.             mLocalService = null
  70.             Toast.makeText(MainActivity.this
  71.                     "Disconnected from local service, 只有在异常的情况才会调用onServiceDisonnected方法"
  72.                     Toast.LENGTH_SHORT).show(); 
  73.         } 
  74.         
  75.         @Override 
  76.         public void onServiceConnected(ComponentName name, IBinder service) { 
  77.             //获得LocalService实例,注意:此时仅仅是将Activity和LocalService绑定起来了,但并没有启动Service 
  78.             //如果要启动LocalService, 
  79.             //只需要执行mLocalService.startService(new Intent(MainActivity.this, LocalService.class)); 
  80.             Log.i(TAG, "MainActivity ----> onServiceConnected"); 
  81.             mLocalService = ((LocalService.LocalBinder)service).getLocalService(); 
  82.             Toast.makeText(MainActivity.this"Connected to local service", Toast.LENGTH_SHORT).show(); 
  83.         } 
  84.     }; 
  85.  
  86.     /** 
  87.      * 此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。 
  88.      * 返回true则显示该menu,false 则不显示; 
  89.      * (只会在第一次初始化菜单时调用) 
  90.      */ 
  91.     @Override 
  92.     public boolean onCreateOptionsMenu(Menu menu) { 
  93.         // Inflate the menu; this adds items to the action bar if it is present. 
  94.         getMenuInflater().inflate(R.menu.main, menu); 
  95.         return true
  96.     } 
  97.  

本地服务类(Service):

  1. import android.app.Service; 
  2. import android.content.Intent; 
  3. import android.os.Binder; 
  4. import android.os.IBinder; 
  5. import android.util.Log; 
  6.  
  7. public class LocalService extends Service { 
  8.  
  9.     private final String TAG = "ActivityBindLocalService"
  10.     private final IBinder mBinder = new LocalBinder(); 
  11.     
  12.     /** 
  13.      * 返回LocalBinder对象 
  14.      */ 
  15.     @Override 
  16.     public IBinder onBind(Intent intent) { 
  17.         Log.i(TAG, "LocalService ----> LocalService onBind"); 
  18.         return mBinder; 
  19.     } 
  20.  
  21.     /** 
  22.      * 创建一个内部类用来返回LocalService实例 
  23.      * @author Simon Xu 
  24.      * 
  25.      * 2013-4-10下午2:34:33 
  26.      */ 
  27.     public class LocalBinder extends Binder{ 
  28.         LocalService getLocalService(){ 
  29.             Log.i(TAG, "localService ----> return LocalService"); 
  30.             return LocalService.this
  31.         } 
  32.     } 
  33.  
  34.     @Override 
  35.     public void onCreate() { 
  36.         Log.i(TAG, "LocalService----> LocalService onCreate"); 
  37.         super.onCreate(); 
  38.     } 
  39.     
  40.     @Override 
  41.     public int onStartCommand(Intent intent, int flags, int startId) { 
  42.         Log.i(TAG, "LocalService----> LocalService onStartCommand"); 
  43.         return START_STICKY; 
  44.     } 
  45.  
  46.     @Override 
  47.     public void onDestroy() { 
  48.         Log.i(TAG, "LocalService----> LocalService onDestroy"); 
  49.         super.onDestroy(); 
  50.     }    
  51.     
  52. }

 

(此图来源于<<Android框架揭秘>>一书)

(此图来源于<<Android框架揭秘>>一书)