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

整个项目包括两个文档: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")解除绑定时调用
		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
			mConnection = null;
			isBond = false;
		}

		//当服务与调用者(这里即为"MainActivity")绑定时调用
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// TODO Auto-generated method stub
			//通过IBinder创建一个进程间传输信息的Messenger对象:mMessenger
			mMessenger = 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 exception
				e.printStackTrace();
			}
		}
	}

	Button button1,button2,button3;

	@Override
	protected 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);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (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{

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			switch (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();
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值