近来整理文档,发现两年前研究Android多个Activity叠加显示的方案。时光荏苒,一去不回。

虽然后来没有用上,但还是整理如下,Android版本还是2.2的:

ActivityGroup描画方式的研究结果如下:

  1. 可以实现同一进程内的Activity叠加
  2. 通过设置两个Android App 的sharedUserID,可以使这两个App运行在同一进程上
  3. 通过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

综合以上两种方案:

  1. Java Reflect仅用于获取 App的handler,不作其他用途。
  2. App交互使用Message方式。

摘自:http://www.th7.cn/Program/Android/201308/146165.shtml

Android用shareUserID实现多个Activity显示在同一界面相关推荐

  1. Android 隐式跳转(Activity的隐式跳转)

    学而时习之,温故而知新,放假前回顾下android 的 隐式跳转 Activity的显式跳转: 是直接指定需要调用的Activity Activity的隐式跳转: 不明确指定启动哪个Activity, ...

  2. 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)

    前言:以前曾写过一篇关于动态生成控件的文章<动态添加控件及将某XML动态加入到Activity显示>,比较浅显,对于RelativeLayout的相关布局设置方法及相对布局与线性布局的混合 ...

  3. 动态添加控件及将某XML动态加入到Activity显示

    一.动态添加控件.设置参数 这个难度比较大,放在前面讲,用的也比较多,普通情况下,我们会提前把布局XML写好,然后对XML中的元素进行设置,但这种方法在有些情况下就显得不适合,比较聊天应用,比如帖子的 ...

  4. android组件通讯 Intent- 系统标准的Activity Action应用

    标准的Activity Actions ACTION_M AIN 作为一个主要的进入口,而并不期望去接受数据 ACTION_VIEW 向用户去显示数据 ACTION_ATTACH_DATA 别用于指定 ...

  5. ​Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

    Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable] 在Android中的不同Activity之间传递对象,我们可以考虑采用Bun ...

  6. Android 滑动显示下一层界面

    Android 滑动显示下一层界面 主要activity: public class UpPage extends Activity { private Button upButton; privat ...

  7. Android中使用Notification在通知栏中显示通知

    场景 App在接收到后台推送的消息后,需要在系统通知栏中显示通知消息,并且点击通知消息跳转到新的页面,并将消息内容传递过去. 效果如下 注: 博客: https://blog.csdn.net/bad ...

  8. android listview 列加id,Android实战开发之ListView同一个item显示2列的实现方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用List ...

  9. Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...

最新文章

  1. Redis——学习之路四(初识主从配置)
  2. JTABLE加滚动条
  3. 一文了解PL610-01-O96TC-R
  4. xftp连接海康摄像头报错:sftp子系统申请已拒绝 请确保ssh连接的sftp子系统设置有效
  5. LINQ中判断日期时间段
  6. python地图散点图_在地图上叠加散点图(img)
  7. IO流 (二) ----- 文件流
  8. 为什么大部分的程序员成不了架构师?为什么?
  9. 电脑版微信怎么双开、多开
  10. 手撕IP核系列——Xilinx FIFO IP核-异步FIFO
  11. Python爬虫实战—笔趣看小说网
  12. 【学习笔记】Stern-Brocot Tree
  13. “80后”!顶尖985,迎新副校长!
  14. matlab解二阶微分方程组ode,MATLAB解含参数方程、矩阵方程、二阶微分方程组
  15. U-Boot参数设置 .
  16. js添加多marker 高德地图_覆盖物-参考手册-地图 JS API | 高德地图API
  17. linux聊天python_Python socket C/S结构的聊天室应用
  18. Java在线考试系统-设计和源码
  19. Vue开发Web阅读器(一)
  20. 俊哥的blog的一道题

热门文章

  1. 全城瘫痪!因韩国电信公司大火 首尔陷断网危机
  2. 抛弃市电!微软建成世界首座天然气数据机房:能耗大减
  3. ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理
  4. 成功解决Please use the NLTK Downloader to obtain the resource:
  5. OS_CORE.C(1)
  6. spark hbase
  7. win10添加新用户
  8. JavaScript校验身份证,包含省份、长度、出生年月日、校验位的检测、性别、年龄...
  9. BZOJ3075[USACO 2013 Mar Gold 3.Necklace]——AC自动机+DP
  10. getpass 模块