整个项目包括两个文档: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();
}
}