Messenger的核心也就是Message和Handler,一樣是Service提供方法,供其餘地方進行調用android
public class MyService extends Service { class ServiceHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: Log.i("MyService", "msg.what is 1"); break; default: super.handleMessage(msg); } super.handleMessage(msg); } } final Messenger messenger = new Messenger(new ServiceHandler()); @Override public IBinder onBind(Intent intent) { Log.i("MyService", "service is binded"); return messenger.getBinder(); } }
<service android:name=".MyService" android:enabled="true" android:exported="true" > <intent-filter> <action android:name="com.serviceHandler" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service>
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } Messenger messenger = null; private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { messenger = new Messenger(iBinder); } @Override public void onServiceDisconnected(ComponentName componentName) { messenger = null; } }; @Override protected void onStart() { super.onStart(); Log.i("MyActivity", "activity start bind service"); Intent it = new Intent(); // 這個設置的是Service所在的AndroidManifest裏面設置的action屬性 it.setAction("com.serviceHandler"); // 這個是Service的包名 it.setPackage("com.test"); bindService(it, serviceConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); unbindService(serviceConnection); } // 執行這個方法,會在logcat看到 'msg.what is 1' 的消息輸出,這樣就能夠經過Message來進行數據交互了 public void testBindService(View v){ Message msg = Message.obtain(); msg.what = 1; try { messenger.send(msg); }catch (Exception e) { Log.e("MyActivity", utils.getExceptionMsg(e)); } } }