安卓 Messager类的使用
(可以看到LogCat中已经打印出了从MainActivity发出的信息)
进行IPC(进程间通信)通信,一般写一个AIDL(安卓接口定义语言)接口,再写一个Service子类,然后实现AIDL接口 当做IBinder返回给Activity界面层。
单线程中与Service进行通信 Messenger类来处理,消息传递给Service进行通信。
Service的代码:
public classMyService extends Service { private Messenger messenger = null; private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { Log.d("MyService_Hanler", "Msg:" + msg.what + ";" + msg.obj); } }; public MyService() { } @Override public void onCreate() { super.onCreate(); messenger = new Messenger(handler);//获取Service中的Messager } @Override public IBinder onBind(Intent arg0) { return messenger.getBinder();//取得Binder } }
Activity代码:
public classMainActivity extends ActionBarActivity { private Messenger messenger; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName cn) { Log.d("MainActivity", "ServiceDisconnected"); } @Override public void onServiceConnected(ComponentName cn, IBinder ibiner) { messenger = new Messenger(ibiner);//��取得Messenger Log.d("MainActivity", "Connect Success!!"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindService(new Intent(this, MyService.class), conn, Context.BIND_AUTO_CREATE); } public void sendMsg(View view) { if (messenger == null) { return; } Message msg1 = Message.obtain(); msg1.what = 1; msg1.obj = "I Send A Message I am MainActivity"; try { messenger.send(msg1); } catch (RemoteException e) { e.printStackTrace(); } } }