Service与Activity之间通信(学习笔记)

来源:互联网 发布:python 对数坐标轴 编辑:程序博客网 时间:2024/04/30 03:48

整个项目包括两个文档:MainActivity.java   message.java;注释包括在代码里面,比较简单,就不另作阐述了


MainActivity.java

package com.example.test_message;import android.os.Bundle;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.view.View;import android.widget.Button;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;public class MainActivity extends Activity implements android.view.View.OnClickListener{Messenger mMessenger = null;boolean isBond;//实例化一个ServiceConnection()对象用以管理Service的状态private ServiceConnection mConnection = new ServiceConnection() {//当服务与调用者(这里即为"MainActivity")解除绑定时调用@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubmConnection = null;isBond = false;}//当服务与调用者(这里即为"MainActivity")绑定时调用@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stub//通过IBinder创建一个进程间传输信息的Messenger对象:mMessengermMessenger = new Messenger(service);isBond = true;}};public void sayHellop(int MSG){if (!isBond) {/** * 通过已经和service绑定的Message(mMessenger)可以进行进程间通信 * 。send(Message msg)方法可以发送特定的信息(msg对象中定义内容) */Message msg = Message.obtain(null, MSG, 0, 0);try {mMessenger.send(msg);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}Button button1,button2,button3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1 = (Button)findViewById(R.id.button1);button1.setOnClickListener(this);button2 = (Button)findViewById(R.id.button2);button2.setOnClickListener(this);button3 = (Button)findViewById(R.id.button3);button3.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1://绑定服务bindService(new Intent(this, message.class), mConnection, BIND_AUTO_CREATE);break;case R.id.button2:if (isBond) {unbindService(mConnection);isBond = false;}break;case R.id.button3://发送的内容直接利用message中定义的常量sayHellop(message.MSG_DATA);break;default:break;}}}

message.java

package com.example.test_message;import android.annotation.SuppressLint;import android.app.Service;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.widget.Toast;public class message extends Service {static final int MSG_HELLO = 1;static final int MSG_DATA = 2;static final int MSG_BACK = 3;@SuppressLint("HandlerLeak")class IncomingHandler extends Handler{@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch (msg.what) {case MSG_HELLO:Toast.makeText(getApplicationContext(), "HELLO!", Toast.LENGTH_SHORT).show();break;case MSG_DATA:Toast.makeText(getApplicationContext(), "THE_DATA", Toast.LENGTH_SHORT).show();break;case MSG_BACK:break;default:super.handleMessage(msg);break;}}}final Messenger mMessenger = new Messenger(new IncomingHandler());public IBinder onBind(Intent intent){Toast.makeText(getApplicationContext(), "Binding!", Toast.LENGTH_SHORT).show();return mMessenger.getBinder();}}


原创粉丝点击