tencent cloud

腾讯云超级应用服务

动态与公告
【2025年1月2日】关于腾讯云小程序平台更名为腾讯云超级应用服务的公告
控制台更新动态
Android SDK 更新动态
iOS SDK 更新动态
Flutter 更新动态
IDE 更新动态
基础库更新动态
产品简介
产品概述
产品优势
应用场景
购买指南
计费概述
按量计费(后付费)
续费指引
停服说明
快速入门
套餐管理
概述
控制台账号管理
存储配置
加速配置
品牌化配置
平台功能
控制台登录
用户和权限体系
小程序管理
小游戏管理
应用管理
商业化
平台管理
用户管理
团队管理
运营管理
安全中心
代码接入指引
Demo 及 SDK 获取
Android
iOS
Flutter
App 服务端接入指南
GUID 生成规则
小程序开发指南
小程序介绍与开发环境
小程序代码组成
指南
框架
组件
API
服务端
JS SDK
基础库
IDE 使用指南
小游戏开发指南
指南
API
服务端
实践教程
小程序登录实践教程
小程序订阅消息实践教程
支付相关实践教程
广告接入实践教程
小游戏订阅消息实践教程
相关协议
数据处理和安全协议

Android 机制说明

PDF
聚焦模式
字号
最后更新时间: 2025-06-06 18:27:19

Android 端 SDK 为什么要使用多进程来实现?

Android 端运行时 SDK 采用多进程机制实现,所谓多进程是指小程序与 superapp 分隔开,各自运行在独立的进程中,进程之间互不干扰,通过跨进程通信相互传递数据。之所以选用多进程,原因主要有以下几点:
不占用 superapp 的内存。系统会为小程序进程分独立的内存空间,小程序不会占用主进程的内存,因此 App 不用担心内存溢出等问题;
保证 superapp 安全稳定运行。小程序进程中发生的一切异常都不会影响到 superapp,即使小程序进程中发生了崩溃,superapp 照样能够继续正常运行;
更容易实现数据解耦。进程之间内存是天然隔离的,除非通过跨进程通信手段,否则一个进程中的数据永远都不会被另一个进程直接读写,因此不用担心数据耦合问题。

多进程如何实现?

因为 Android 没有提供动态创建进程的 API,所以采用为 Activity 绑定进程的方式来实现进程的创建,即在 AndroidManifest.xml 中为 Activity 指定 android:process 属性,当 Activity 被第一次启动时,系统会创建新的进程并将 Activity 所在的栈放到这个进程里面;
为了增强用户体验,需要将同时打开的不同小程序放在系统最近任务栏的不同位置展示,这样用户就能清楚地看到当前打开了哪些小程序并随意切换。为了实现这个效果,需要在过 AndroidManifest.xml 中为 Activity 设置 android:taskAffinity 属性,将不同小程序进程的 Activity 压入不同的任务栈。

小程序进程如何管理?

SDK 支持最多同时创建5个小程序进程,当小程序进程数量没有超过5个时,每启动一个新的小程序都会创建一个新的进程,当小程序个数达到最大数量之后,再启动新的小程序时,将会复用现有的小程序进程来打开小程序;
打开相同的小程序时,会先检查小程序是否已启动,如果已启动则会直接唤起对应的进程;
小程序进程的创建、复用、唤起等逻辑都是在主进程中完成的,由主进程统一调度。

小程序进程和主进程间如何通信?

小程序进程和 superapp 进程之间的双向通信是通过 AIDL 实现的,小程序进程和主进程绑定同一个远程服务,通过 Binder 机制获取到服务的代理对象,通过代理对象调用 AIDL 接口实现跨进程通信。

进程安全、线程安全问题如何处理?

目前小程序运行过程中需要写入的资源均存放在应用沙盒内小程序对应的目录下,没有对全局共享资源的写操作,因此不存在进程间竞争同一系统资源的问题。对于将来可能存在的进程安全问题,在开发过程中会使用进程安全的方式来读写数据,例如使用文件锁访问文件、通过 ContentProvider 代替 SharedPreferences 共享数据等;
进程间并不存在直接的线程安全问题,只有不同的小程序进程通过跨进程通信并发访问主进程的内存时,或者进程内部并发读写内存时才会带来线程安全问题,SDK 通过锁、同步方法、java 并发类集等方式来解决中线程安全相关问题。












帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈