日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

加載框架與定制

更新時(shí)間:

mPaaS Android 框架提供了一整套的加載邏輯。基于此框架,研發(fā)團(tuán)隊(duì)可以進(jìn)行多業(yè)務(wù)線開發(fā)。本文描述框架的啟動(dòng)流程以及如何在框架下添加自己的代碼以對(duì)接啟動(dòng)。

啟動(dòng)流程

Application

傳統(tǒng) Android apk 運(yùn)行時(shí)首先加載 AndroidManifest 文件 application 節(jié)點(diǎn)中 android:name 配置的 Application。

由于 mPaaS Android 框架重寫了加載流程, android:name 中配置 mPaaS Android 框架的 com.alipay.mobile.quinox.LauncherApplication 類。

<application
    android:name="com.alipay.mobile.quinox.LauncherApplication"
    android:allowBackup="true"
    android:debuggable="true"
    android:hardwareAccelerated="false"
    android:icon="@drawable/appicon"
    android:label="@string/name"
    android:theme="@style/AppThemeNew" >
</application>

啟動(dòng)頁

由于框架加載 bundle 可能會(huì)比較耗時(shí),因此需要一個(gè)啟動(dòng)頁等待框架啟動(dòng)完成之后再跳轉(zhuǎn)到程序主頁,所以在 AndroidManifest 文件中配置了框架提供的 com.alipay.mobile.quinox.LauncherActivity 應(yīng)用啟動(dòng)頁。

配置如下:

<activity
android:name="com.alipay.mobile.quinox.LauncherActivity"
android:configChanges="orientation | keyboardHidden | navigation"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

為方便開發(fā)人員對(duì)啟動(dòng)過程的理解,也為了避免啟動(dòng)過程被誤改誤刪、被干擾,mPaaS 的啟動(dòng)過程被適度封裝。因此,上述的 LauncherApplicationLauncherActivity 對(duì)開發(fā)人員完全不可見。

為了讓客戶端 App 在啟動(dòng)過程中實(shí)現(xiàn)自身的初始化邏輯,mPaaS 設(shè)計(jì)了 LauncherApplicationAgentLauncherActivityAgent 代理。作為開發(fā)人員,您可以通過繼承這兩個(gè)類,在相應(yīng)的回調(diào)中實(shí)現(xiàn)自身的初始化邏輯。當(dāng)您在 bundle 工程中定義了這兩個(gè)類時(shí),在使用 ProGuard 進(jìn)行代碼混淆的時(shí)候則需要對(duì)這兩個(gè)類進(jìn)行防混淆設(shè)置,詳情請(qǐng)參見 混淆 Android 文件

啟動(dòng)流程圖

mPaaS Android 框架加載流程如下:2

  1. 框架啟動(dòng)后主線程會(huì)創(chuàng)建啟動(dòng)頁 LauncherActivity ,然后回調(diào) LauncherActivityAgentpreInit 方法。

  2. 框架進(jìn)行 multidex。過程中會(huì)回調(diào) LauncherApplicationAgentpreInit 方法,讀取當(dāng)前 .apk 中每個(gè) bundle 的描述文件,并對(duì)每個(gè) bundle 創(chuàng)建對(duì)應(yīng)的類加載器,加載其中的資源文件。

  3. 初始化完成后,回調(diào) LauncherActivityAgentLauncherApplicationAgentpostInit 方法。

定制

實(shí)際上,框架已在 Launcher 工程中自動(dòng)創(chuàng)建了兩個(gè)類 MockLauncherApplicationAgentMockLauncherActivityAgent 繼承了 LauncherApplicationAgentLauncherActivityAgent 這兩個(gè)回調(diào)接口。在框架的初始化過程中,它們分別在 LauncherApplictionLauncherActivity 中被調(diào)用。

在 Portal 的 AndroidManifest.xml 中配置如下。開發(fā)人員也可在 Bundle 中實(shí)現(xiàn)這兩個(gè)代理類,在以上配置中修改對(duì)應(yīng) meta-datavalue 值:

     <application
          android:name="com.alipay.mobile.quinox.LauncherApplication" >

         <!-- Application 的回調(diào)配置 -->
         <meta-data
            android:name="agent.application"
            android:value="com.mpaas.demo.launcher.framework.MockLauncherApplicationAgent"/>

        <!-- Activity 的回調(diào)配置 -->
        <meta-data
            android:name="agent.activity"
            android:value="com.mpaas.demo.launcher.framework.MockLauncherActivityAgent"/>
        <!-- 啟動(dòng)頁的布局配置 -->
        <meta-data
            android:name="agent.activity.layout"
            android:value="layout_splash"/>

     </application>

代理類

agent.application 配置的是啟動(dòng)過程代理 ApplicationAgent,如下所示:

  public class MockLauncherApplicationAgent extends LauncherApplicationAgent {
      @Override
      protected void preInit() {
          super.preInit();
          //框架初始化前
      }

      @Override
      protected void postInit() {
          super.postInit();
          //框架初始化后
      }
  }

客戶端 App 可以在 LauncherApplicationAgent 的實(shí)現(xiàn)類中,進(jìn)行一些 Application 級(jí)別的初始化工作。preInit() 回調(diào)發(fā)生在框架初始化之前,因此不要在這里調(diào)用框架(MicroApplicationContext)的相關(guān)接口。而 postInit() 回調(diào)發(fā)生在框架初始化完成之后,是可以使用的。

agent.activity 配置的是啟動(dòng) Activity 的代理,如下所示:

public class MockLauncherActivityAgent extends LauncherActivityAgent {

        @Override
        public void preInit(Activity activity) {
                super.preInit(activity);
                //Launcher Activity 啟動(dòng)前
        }

        @Override
        public void postInit(final Activity activity) {
            super.postInit(activity);
                //Launcher Activity 啟動(dòng)后
                //跳轉(zhuǎn)程序首頁的邏輯
                startActivity(activity,YOUR_ACTIVITY);
        }
}

同上述的 LauncherApplicationAgent 類似,LauncherActivityAgent 的兩個(gè)回調(diào)也分別發(fā)生在框架初始化之前和之后,使用方法也類似。

修改啟動(dòng)頁布局

在 Portal 的 AndroidManifest.xml 中還配置了啟動(dòng)頁的布局文件,如下所示:

<application
android:name="com.alipay.mobile.quinox.LauncherApplication" >
<!-- 啟動(dòng)頁的布局配置 -->
<meta-data
android:name="agent.activity.layout"
android:value="layout_splash"/>

</application>

修改 value 值為自定義的布局文件名。

說明

需要把布局文件和引用的相關(guān)資源放置在 Portal 工程里。

相關(guān)鏈接

代碼示例