日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android用shareUserID实现多个Activity显示在同一界面

發(fā)布時間:2025/3/21 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android用shareUserID实现多个Activity显示在同一界面 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

近來整理文檔,發(fā)現(xiàn)兩年前研究Android多個Activity疊加顯示的方案。時光荏苒,一去不回。

雖然后來沒有用上,但還是整理如下,Android版本還是2.2的:

ActivityGroup描畫方式的研究結(jié)果如下:

  • 可以實現(xiàn)同一進程內(nèi)的Activity疊加
  • 通過設(shè)置兩個Android App 的sharedUserID,可以使這兩個App運行在同一進程上
  • 通過Message來實現(xiàn)進程內(nèi)App的交互
  • 結(jié)論:該方案可以滿足多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中設(shè)置相同的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如果用相同的數(shù)字簽名,則會共用同一個Linux user ID.

    相同進程中不同App之間的交互方案1:

    通過Java Reflect 機制實現(xiàn)User App對 My App 方法的調(diào)用。

    示例:獲取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實現(xiàn)交互, 該方案的先決條件是, 先用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之間的交互方案比較:

    方案

    優(yōu)點

    缺點

    1. Java Reflect

    使用靈活,功能強大,可以直接調(diào)用App的所有public方法。

    App之間耦合性高。

    2. Message

    App之間耦合性低。

    必須先獲取其他App的handler

    ?

    綜合以上兩種方案:

  • Java Reflect僅用于獲取 App的handler,不作其他用途。
  • App交互使用Message方式。
  • 摘自:http://www.th7.cn/Program/Android/201308/146165.shtml

    總結(jié)

    以上是生活随笔為你收集整理的Android用shareUserID实现多个Activity显示在同一界面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。