Activity给Service发消息
还是用Messenger
直接上代码
23. public class MainActivity extends Activity {
24. private Messenger messenger;
25. //将该 Handler发送Service
26. private Messenger mOutMessenger = new Messenger(new OutgoingHandler());
27.
创建了成员变量mOutMessenger
28. @Override
29. protected void onCreate(Bundle savedInstanceState) {
30. super.onCreate(savedInstanceState);
31. setContentView(R.layout.activity_main);
32. }
onCreate方法
33. // 绑定服务
34. public void click1(View view) {
35. Intent intent = new Intent(this, MessengerService.class);
36. ServiceConnection conn = new MyServiceConnection();
37. bindService(intent, conn, Service.BIND_AUTO_CREATE);
38. }
39.
创建intent,创建MyServiceConnection对象
绑定服务,bindService(intent,conn,Service.BIND_AUTO_CREATE);
40. // 发送消息
41. public void click2(View view) throws RemoteException {
42. if (messenger == null) {
43. Toast.makeText(this, "服务不可用!", Toast.LENGTH_SHORT).show();
44. return;
45. }
如果messenger为空
吐司
46. Message message = new Message();
47. message.obj="长江长江我是黄河";
48. message.what =0;
49. messenger.send(message);
50.
51. }
创建message,
用messenger来发送message;
52.
53. class OutgoingHandler extends Handler{
54. @Override
55. public void handleMessage(Message msg) {
56. Log.d("tag", msg.toString());
57. }
58. }
59.
60. class MyServiceConnection implements ServiceConnection {
61.
62. @Override
63. public void onServiceConnected(ComponentName name, IBinder service) {
64. Toast.makeText(MainActivity.this, "连接成功!", Toast.LENGTH_SHORT).show();
65. messenger = new Messenger(service);
66. Message message=new Message();
67. message.what = 1;
68. //Activity 绑定 Service的时候给Service发送一个消息,该消息的obj属性是一个Messenger对象
69. message.obj = mOutMessenger;
70. try {
71. messenger.send(message);
72. } catch (RemoteException e) {
73. e.printStackTrace();
74. }
75. }
新建类MyServiceConnection实现ServiceConnection
新建messenger对象,创建message
用messenger发送message;
76.
77. @Override
78. public void onServiceDisconnected(ComponentName name) {
79. Toast.makeText(MainActivity.this, "连接已经断开!", Toast.LENGTH_SHORT).show();
80. }
81.
82. }
83.
84. }
MainActivity中代码总结
看着很复杂
其实认真仔细地看一遍,很简单
自定义2个类
1个OutgoingHandler继承Handler
1个MyServiceConnection实现ServiceConnection
OutgoingHandler里面
覆写一下handleMessage方法
MyServiceConnection里面
覆写一下onServiceConnected,和onServiceDisconnected方法
一个就是服务连接成功,一个就是服务连接断开
那么就在onServiceConnected服务连接成功后给service发送一个消息
messenger=new Messenger(service);
messenger.send(message);
就这么简单
然后来两个方法
click1里面绑定服务
bindService
click2里面用messenger给service发消息