android 进程间通信

我们在开发过程中可能会使用Service后台服务,而后台服务可能需要与Activity之间进行数据交互。

这时我们可以假设Activity为客户端程序,而服务Service为服务端。

以下是信使(Messenger)对象的使用概要:

1.  服务端实现的一个处理器(Handler接口),这个处理器针对每次来自客户端的调用接收一次回调;

2、  客户端实现的一个处理器(Handler接口),这个处理器针对每次客户端向服务端发送消息

2.  这个处理器被用于创建一个信使对象(Messager)(这个信使对象要引用这个处理器);

3.  信使对象创建一个创建一个服务端从onBind()方法中返回给客户端的IBinder对象;

4.  客户端使用这个IBinder对象来实例化这个信使对象(信使引用了服务端的处理器),客户端使用这个信使给服务端发送Message对象;

5.  服务端在它的处理器(Handler)的handleMessage()方法中依次接收每个Message对象

客户端程序:

package com.example.testservice;

import android.os.Bundle;

import android.os.Handler;

import android.os.IBinder;

import android.os.Message;

import android.os.Messenger;

import android.os.RemoteException;

import android.app.Activity;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

Messenger mService = null;

private Button button;

private int  index=1;

//将Handler与Messenger绑定

final Messenger mMessenger = new Messenger(new IncomingHandler());

private ServiceConnection connection = new ServiceConnection() {

public void onServiceDisconnected(ComponentName name) {

}

/*

* 当服务端与客户端绑定成功后会调用此方法    service为服务端传递过来的Messenger对象(non-Javadoc)

* 绑定成功后需要将客户端的Handler接口通过Messenger发送到服务端

* 以便服务端向客户端发消息

*/

public void onServiceConnected(ComponentName name, IBinder service) {

mService = new Messenger(service);

Message message = Message.obtain();

message.what=index;

message.replyTo = mMessenger;

try {

mService.send(message);

} catch (RemoteException e) {

e.printStackTrace();

}

}

};

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button = (Button) findViewById(R.id.button);

button.setOnClickListener(this);

Intent intent = new Intent(this, MyService.class);

//绑定Service

bindService(intent, connection, Context.BIND_AUTO_CREATE);

}

public void onClick(View v) {

Message message = Message.obtain();

message.what=index;

try {

/*

* 向服务端发消息,

*

*/

mService.send(message);

} catch (RemoteException e) {

e.printStackTrace();

}

}

//此Handler接口主要处理来自服务端的发送消息

class IncomingHandler extends Handler{

public void handleMessage(Message msg) {

}

}

}

服务端程序

package com.example.testservice;

import java.util.ArrayList;

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.os.RemoteException;

import android.util.Log;

public class MyService extends Service {

/*

* 客户端的Messenger集合

* 之所以为集合,是因为一个服务端可能对应多个客户端

*/

ArrayList<Messenger> mClients = new ArrayList<Messenger>();

/**

* 服务端Messenger信使

*/

final Messenger mMessenger = new Messenger(new IncomingHandler());

public void onCreate() {

super.onCreate();

}

public void onDestroy() {

super.onDestroy();

}

/*

* 接收来自客户端的消息

*/

class IncomingHandler extends Handler {

public void handleMessage(Message msg) {

Log.e("handleMessage", "handleMessage");

switch (msg.what) {

case 1:

Log.e("11111111111", "11111111111");

mClients.add(msg.replyTo);

break;

case 2:

break;

}

}

}

/*

* (non-Javadoc)

* @see android.app.Service#onBind(android.content.Intent)

* 将服务端的Messeager返回给客户端

*/

public IBinder onBind(Intent intent) {

return mMessenger.getBinder();

}

}

时间: 2024-10-12 22:13:29

android 进程间通信的相关文章

浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通信机制Binder的总体架构,它由Client.Server.Service Manager和驱动程序Binder四个组件构成.本文着重介绍组件Service Manager,它是整个Binder机制的守护进程,用来管理

android进程间通信:使用AIDL

欢迎阅读本文,你能关注本文,你知道你需要进程间通信.需要AIDL(以及Binder),那么可以默认你对这些概念已经有了一些了解,你(大致)知道它们是什么,它们有什么用,所以为了节约大家的眼力和时间,在此我不复制粘贴网上泛滥的博客或者翻译冗长的android文档. 关于AIDL的介绍在文档:docs/guide/developing/tools/aidl.html 关于IBinder的介绍在文档:docs/reference/android/os/IBinder.html 以及Binder:doc

Android进程间通信之内部类作为事件监听器

在Android中,使用内部类可以在当前类里面发用改监听器类,因为监听器类是外部类的内部类,所以可以自由访问外部类的所有界面组件.以下是一个调用系统内部类实现短信发送的一个例子: SMS类: package com.example.msmlistener; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.telephony.Sm

饿了么开源项目Hermes:新颖巧妙易用的Android进程间通信IPC框架

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51464518 Android进程间通信IPC是比较高级的话题,很多Android程序员碰到IPC就觉得头疼,尤其是AIDL这类东西. 公司最近在研究DroidPlugin插件开发,DroidPlugin把每个子app都变成一个进程.这样的话子app和主app如果需要共享数据,就需要IPC.所以我开发了Hermes框架,让IPC变得非常简单优雅

初识Android进程间通信之----Binder机制

[转载请注明出处:http://blog.csdn.net/feiduclear_up/article/details/51405967 CSDN废墟的树] 前言 前面两篇博客分别介绍了Android进程间通信之AIDL的使用,以及使用AIDL传递复杂对象以及Bitmap对象.所谓AIDL:Android Interface Definition Language,是一种Android接口定义语言,用于编写Android进程间通信代码.也就是说AIDL只是一个实现进程间通信的一个工具,真正实现A

Android进程间通信与数据共享(ppt)

Android进程间通信与数据共享(ppt)

Android进程间通信之----Aidl传递对象

转载请注明出处 CSDN废墟的树 前言 有关Android进程间通信之Aidl编程的基本使用步骤已经在上一篇博客中有讲解,Android studio 下的aidl编程实现Android的夸进程间通信.上一篇博客中只是演示了怎么利用Aidl实现跨进程间传递Java基本类型,以及Aidl传递Bitamap对象.可能在一些场景下你需要跨进程传递一个对象,那么Aidl是否能传递一个对象呢?答案是肯定的,网上也有很多相关的资料,之所以写这篇博客:一是当作自己学习笔记咯,二是把自己遇到的问题分享出来. A

AIDL实现Android进程间通信实例

实现Android进程间通信实例有好几种方法: 1,AIDL 2,Broadcast 3,Intent 4,Content Provider 记录一下AIDL实现Android进程间通信的方式: Android的AIDL进程间通信实现步骤: 一:创建AIDL服务端:aidl文件,自动生成的接口java文件,服务service xxxInterface.aidl  (远程服务的接口定义) package com.example.aidltest; interface IMyAidlInterfac

Android进程间通信(IPC)机制Binder简介和学习计划

在Android系统,每个应用程序是由多个Activity和Service部件,这些Activity和Service有可能在相同的处理被执行,此外,还可以在不同的过程中进行. 然后.不是在同一个过程Activity或者Service是怎样通信的呢?这就是本文中要介绍的Binder进程间通信机制了. 我们知道,Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的Unix系统进程间通信(IPC)机制. 有传统的管道(Pipe).信号(Signal)和跟踪(Trace).这三项

转Android进程间通信(IPC)机制Binder简要介绍和学习计划

转自:http://blog.csdn.net/luoshengyang/article/details/6618363/ 在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的Activity或者Service是如何通信的呢?这就是本文中要介绍的Binder进程间通信机制了. <Android系统源代码情景分析>一书正在进击的程序员网(http:/