当前位置: 首页 > news >正文

Android多进程通信机制

更多面试题请看这里:https://interview.raoyunsoft.com/
面试题专栏会持续更新欢迎关注订阅

1. Messenger跨进程通信

核心原理:基于Handler的消息机制封装,通过Binder实现跨进程通信。适合简单消息传递场景。

服务端实现

public class MessengerService extends Service {private Messenger serviceMessenger = new Messenger(new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 0x01: // 处理客户端消息// 业务逻辑break;}}});@Overridepublic IBinder onBind(Intent intent) {return serviceMessenger.getBinder(); // 返回Binder对象}
}

关键配置:在AndroidManifest.xml中声明独立进程

<service android:name=".MessengerService"android:process=":remote_process"/>

客户端绑定

private Messenger mService;
private ServiceConnection mConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mService = new Messenger(service);try {// 发送消息到服务端Message msg = Message.obtain();msg.what = 0x01;mService.send(msg);} catch (RemoteException e) {e.printStackTrace();}}
};@Override
protected void onCreate(Bundle savedInstanceState) {bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}

双向通信:客户端设置replyTo接收回调

Message msg = Message.obtain();
msg.replyTo = new Messenger(new Handler() {@Overridepublic void handleMessage(Message serverMsg) {// 处理服务端响应}
});

2. AIDL跨进程通信

适用于复杂接口调用场景,支持自定义对象传输。

AIDL接口定义

// Book.aidl
parcelable Book;// IBookManager.aidl
interface IBookManager {List<Book> getBookList();void addBook(in Book book); // in表示输入参数
}

支持数据类型

  • 基本类型(int/long等)
  • String/CharSequence
  • Parcelable对象
  • List/Map(需泛型参数支持AIDL类型)

服务端实现

public class BookManagerService extends Service {private CopyOnWriteArrayList<Book> mBookList = new CopyOnWriteArrayList<>();private IBinder mBinder = new IBookManager.Stub() {@Overridepublic List<Book> getBookList() {return mBookList;}@Overridepublic void addBook(Book book) {mBookList.add(book);}};@Overridepublic IBinder onBind(Intent intent) {return mBinder;}
}

客户端调用

private IBookManager mBookManager;
private ServiceConnection mConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mBookManager = IBookManager.Stub.asInterface(service);try {mBookManager.addBook(new Book("Android进阶"));} catch (RemoteException e) {e.printStackTrace();}}
};

高级特性

  1. 回调监听:使用RemoteCallbackList管理跨进程监听器
private RemoteCallbackList<IOnNewBookListener> mListeners = new RemoteCallbackList<>();// 触发回调
void notifyNewBook(Book book) {int N = mListeners.beginBroadcast();for (int i=0; i<N; i++) {mListeners.getBroadcastItem(i).onNewBook(book);}mListeners.finishBroadcast();
}
  1. 权限验证
<!-- 声明自定义权限 -->
<permission android:name="com.example.PERMISSION_ACCESS_BOOK_SERVICE"android:protectionLevel="normal"/>

服务端验证:

public IBinder onBind(Intent intent) {int check = checkCallingPermission("com.example.PERMISSION_ACCESS_BOOK_SERVICE");return (check == PERMISSION_GRANTED) ? mBinder : null;
}

3. ContentProvider跨进程

专用于应用间数据共享,通过URI机制访问:

// 客户端查询数据
Cursor cursor = getContentResolver().query(Uri.parse("content://com.example.provider/books"),null, null, null, null
);

技术选型建议

  • 简单消息传递 → Messenger
  • 复杂接口调用 → AIDL
  • 数据共享场景 → ContentProvider
    注意跨进程调用默认非线程安全,需做好同步处理!
http://www.dtcms.com/a/495154.html

相关文章:

  • 整体设计 逻辑系统程序 之32 程序定稿 从三对核心概念到三大中台架构的完整设计演进(含全套程序)
  • Android基础入门教程(视频教程)
  • 艺术网站建设公司有哪些好的网站模版
  • 笔记本电脑如何连接打印机?完整连接教程送上
  • IDEA开发JAVA项目
  • 常州模板建站定制网站亚马逊雨林是怎么形成的
  • app怎么防止被攻击被打有多少种防护方式?
  • FFmpeg 基本API avformat_open_input函数内部调用流程分析
  • h5游戏免费下载:进击的方块
  • 修电脑日志--电脑开机黑屏只有光标闪
  • LLaVA-OV:开源多模态的“可复现”革命,不只是又一个模型
  • 网站建设与管理视频教程建设招标网 手机官方网站
  • 快手官方网站音乐人怎么做公司网站模板免费版
  • LeetCode——滑动窗口(进阶)
  • 顺序表算法题(LeetCode)
  • Leetcode每日一练--37
  • F029 vue游戏推荐大数据可视化系统vue+flask+mysql|steam游戏平台可视化
  • leetCode第33题
  • 永久免费搭建网站网页设计与网站建设选择题
  • 【Spring AI】MCP Server 从 sse 升级到 streamableHttp
  • 如何基于Deepseek进行文本章节结构恢复
  • 颠覆传统测试范式:Keploy 如何用 eBPF 技术让测试“偷懒“却更高效?
  • 设计网站推荐html代码全媒体广告策划与营销
  • 企业服务网站开发简要说明网站制作的基本步骤
  • 伊萨推出升级版SUPRAREX™ PRO自动化切割设备:更大尺寸、更强结构、更高安全性、更易维护
  • 如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
  • 营销型网站建设营销型套网站模板软件
  • 【昆明市不动产登记中心-注册安全分析报告】
  • 2008iis添加网站打不开深圳前50强网站建设公司
  • graph neural architecture search