Messenger浅析

来源:互联网 发布:ipad pdf编辑软件 编辑:程序博客网 时间:2024/06/08 01:10

Messenger可以实现在不同进程之间传递Message对象,Messenger底层基于AIDL,并且一次处理一个请求,因此不需要考虑线程同步问题。

服务端:

public class MessengerService extends Service {    private final static int FROM_Client=1;    private static class MessengerHandler extends Handler{        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            switch (msg.what) {            case FROM_Client:                Log.d("MessengerService", msg.getData().getString("msg"));                break;            default:                super.handleMessage(msg);                break;            }        }    }    private final Messenger messenger=new Messenger(new MessengerHandler());    @Override    public IBinder onBind(Intent intent) {        // TODO Auto-generated method stub        return messenger.getBinder();    }}

指定线程:

        <service android:name="com.example.fortest.service.MessengerService"                android:process=":remote"/>

客户端:

public class MainActivity extends Activity {    //private Button mButton;    private Messenger mService;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//      mButton=(Button) findViewById(R.id.btn);        Intent intent=new Intent(MainActivity.this,MessengerService.class);        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);    }    private ServiceConnection mConnection=new ServiceConnection() {        @Override        public void onServiceDisconnected(ComponentName name) {            // TODO Auto-generated method stub        }        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            // TODO Auto-generated method stub            mService=new Messenger(service);            Message message=Message.obtain(null,1);            Bundle data=new Bundle();            data.putString("msg","this is client");            message.setData(data);            try{                mService.send(message);            }catch(RemoteException e){                e.printStackTrace();            }        }    };    @Override    protected void onDestroy(){        super.onDestroy();        unbindService(mConnection);    }}
0 0
原创粉丝点击