Android用shareUserID实现多个Activity显示在同一界面
近来整理文档,发现两年前研究Android多个Activity叠加显示的方案。时光荏苒,一去不回。
虽然后来没有用上,但还是整理如下,Android版本还是2.2的:
ActivityGroup描画方式的研究结果如下:
- 可以实现同一进程内的Activity叠加
- 通过设置两个Android App 的sharedUserID,可以使这两个App运行在同一进程上
- 通过Message来实现进程内App的交互
结论:该方案可以满足多Activity叠加显示的需求。
ActivityGroup中启动不同App的Activity
LocalActivityManager am = getLocalActivityManager(); FrameLayout layout = (FrameLayout) findViewById(R.layout.activity_layout); // Start MySys Activity Intent intent3 = new Intent(); intent3.setClassName("android.My.sys", "android.My.ui.mainmap.MainMapActivity"); Window window3 = am.startActivity("Sample3_UniqueString", intent3); View view3 = window3.getDecorView(); layout.addView(view3); // Start User Activity Intent intent = new Intent(this, Sample1Activity.class); Window window = am.startActivity("Sample1_UniqueString", intent); View view = window.getDecorView(); layout.addView(view); |
在AndroidManifest.xml中设置相同的shareUserID,使两个App共享同一Process
AndroidMySys.apk <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.My.sys" android:versionCode="1" android:versionName="1.0" android:sharedUserId="My.sys"> ActivityGroupActivity.apk <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.jpn.techbooster.sample.activityGroupActivity" android:versionCode="1" android:versionName="1.0" android:sharedUserId="My.sys" > |
两个App如果用相同的数字签名,则会共用同一个Linux user ID.
相同进程中不同App之间的交互方案1:
通过Java Reflect 机制实现User App对 My App 方法的调用。
示例:获取My App Activity的 handler
My App : MainMapActivity.java public class MainMapActivity extends Activity { public static Handler m_handler = null; public Handler GetHandler() { return m_handler; } } User App: ActivityGroupActivity.java // get My activity context LocalActivityManager am = getLocalActivityManager(); Activity activityMainmap = am.getActivity("Sample3_UniqueString"); // invoke MainMapActivity.GetHandler() Class clazz = activityMainmap.getClass(); m_handler = (Handler)clazz.getMethod("GetHandler").invoke(activityMainmap); |
相同进程中不同App之间的交互方案2:
通过Message实现交互, 该方案的先决条件是, 先用Reflect方式获取My App Activity的handler.
My App : MainMapActivity.java m_Handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { // handle message case SHOW_MSG:… User App: Sample1Activity.java // set data Bundle data = new Bundle(); data.putString("ok", "1, 2"); // send message Message msg = new Message(); msg.setData(data); msg.what = SHOW_MSG; m_handler.sendMessage(msg); //get m_handler by reflect first |
相同进程中不同App之间的交互方案比较:
方案 |
优点 |
缺点 |
1. Java Reflect |
使用灵活,功能强大,可以直接调用App的所有public方法。 |
App之间耦合性高。 |
2. Message |
App之间耦合性低。 |
必须先获取其他App的handler |
综合以上两种方案:
- Java Reflect仅用于获取 App的handler,不作其他用途。
- App交互使用Message方式。
摘自:http://www.th7.cn/Program/Android/201308/146165.shtml
Android用shareUserID实现多个Activity显示在同一界面相关推荐
- Android 隐式跳转(Activity的隐式跳转)
学而时习之,温故而知新,放假前回顾下android 的 隐式跳转 Activity的显式跳转: 是直接指定需要调用的Activity Activity的隐式跳转: 不明确指定启动哪个Activity, ...
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
前言:以前曾写过一篇关于动态生成控件的文章<动态添加控件及将某XML动态加入到Activity显示>,比较浅显,对于RelativeLayout的相关布局设置方法及相对布局与线性布局的混合 ...
- 动态添加控件及将某XML动态加入到Activity显示
一.动态添加控件.设置参数 这个难度比较大,放在前面讲,用的也比较多,普通情况下,我们会提前把布局XML写好,然后对XML中的元素进行设置,但这种方法在有些情况下就显得不适合,比较聊天应用,比如帖子的 ...
- android组件通讯 Intent- 系统标准的Activity Action应用
标准的Activity Actions ACTION_M AIN 作为一个主要的进入口,而并不期望去接受数据 ACTION_VIEW 向用户去显示数据 ACTION_ATTACH_DATA 别用于指定 ...
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable] 在Android中的不同Activity之间传递对象,我们可以考虑采用Bun ...
- Android 滑动显示下一层界面
Android 滑动显示下一层界面 主要activity: public class UpPage extends Activity { private Button upButton; privat ...
- Android中使用Notification在通知栏中显示通知
场景 App在接收到后台推送的消息后,需要在系统通知栏中显示通知消息,并且点击通知消息跳转到新的页面,并将消息内容传递过去. 效果如下 注: 博客: https://blog.csdn.net/bad ...
- android listview 列加id,Android实战开发之ListView同一个item显示2列的实现方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用List ...
- Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...
最新文章
- Redis——学习之路四(初识主从配置)
- JTABLE加滚动条
- 一文了解PL610-01-O96TC-R
- xftp连接海康摄像头报错:sftp子系统申请已拒绝 请确保ssh连接的sftp子系统设置有效
- LINQ中判断日期时间段
- python地图散点图_在地图上叠加散点图(img)
- IO流 (二) ----- 文件流
- 为什么大部分的程序员成不了架构师?为什么?
- 电脑版微信怎么双开、多开
- 手撕IP核系列——Xilinx FIFO IP核-异步FIFO
- Python爬虫实战—笔趣看小说网
- 【学习笔记】Stern-Brocot Tree
- “80后”!顶尖985,迎新副校长!
- matlab解二阶微分方程组ode,MATLAB解含参数方程、矩阵方程、二阶微分方程组
- U-Boot参数设置 .
- js添加多marker 高德地图_覆盖物-参考手册-地图 JS API | 高德地图API
- linux聊天python_Python socket C/S结构的聊天室应用
- Java在线考试系统-设计和源码
- Vue开发Web阅读器(一)
- 俊哥的blog的一道题
热门文章
- 全城瘫痪!因韩国电信公司大火 首尔陷断网危机
- 抛弃市电!微软建成世界首座天然气数据机房:能耗大减
- ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理
- 成功解决Please use the NLTK Downloader to obtain the resource:
- OS_CORE.C(1)
- spark hbase
- win10添加新用户
- JavaScript校验身份证,包含省份、长度、出生年月日、校验位的检测、性别、年龄...
- BZOJ3075[USACO 2013 Mar Gold 3.Necklace]——AC自动机+DP
- getpass 模块