详细介绍:MMN-MnnLlmChat 启动顺序解析

AndroidManifest.xml

正常点桌面图标启动 App 时

MNN/apps/Android/MnnLlmChat/app/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
  <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
  <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  <application
    android:name="com.alibaba.mnnllm.android.MnnLlmApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:targetApi="31">
  <uses-native-library
    android:name="libOpenCL.so"
    android:required="false" />
  <uses-library
    android:name="libcdsprpc.so"
    android:required="false"/>
  <provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
  <meta-data
    android:name="android.support.FILE_PROVIDER_PATHS"
    android:resource="@xml/file_paths" />
</provider>
<activity
  android:name="com.alibaba.mnnllm.android.chat.ChatActivity"
  android:configChanges="orientation|screenSize"
  android:exported="true"
  android:windowSoftInputMode="adjustResize">
<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service
android:name="com.alibaba.mls.api.download.DownloadForegroundService"
android:foregroundServiceType="dataSync" />
<activity
android:name=".chat.SelectTextActivity"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".widgets.FullScreenVideoPlayer"
android:exported="false"
android:theme="@style/AppTheme"
android:configChanges="orientation|screenSize" />
<activity
android:name=".main.MainActivity"
android:configChanges="orientation|screenSize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".mainsettings.MainSettingsActivity"
android:configChanges="orientation|screenSize"
android:exported="true"
android:label="@string/settings">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!--        <activity-->
<!--            android:name=".modelsettings.SettingsActivity"-->
<!--            android:exported="true">-->
<!--            <intent-filter>-->
<!--                <action android:name="android.intent.action.MAIN" />-->
<!--                <category android:name="android.intent.category.DEFAULT" />-->
<!--            </intent-filter>-->
<!--        </activity>-->
<activity
android:name=".debug.DebugActivity"
android:exported="false"
android:label="@string/debug_activity_title"
android:theme="@style/AppTheme" />
<activity
android:name=".debug.VideoDecoderTestActivity"
android:exported="false"
android:label="@string/video_decoder_test_title"
android:theme="@style/AppTheme" />
<activity
android:name=".debug.DebugAnimationActivity"
android:exported="true"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service
android:name="com.alibaba.mnnllm.api.openai.service.OpenAIService"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="dataSync" >
</service>
<receiver
android:name="com.alibaba.mnnllm.api.openai.manager.ApiServiceActionReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.alibaba.mnnllm.api.openai.STOP_SERVICE" />
<action android:name="com.alibaba.mnnllm.api.openai.COPY_URL" />
<action android:name="com.alibaba.mnnllm.api.openai.TEST_PAGE" />
</intent-filter>
</receiver>
<activity android:name=".debug.WidgetTestActivity"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".benchmark.CustomQRScannerActivity"
android:exported="false"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<activity
android:name="com.alibaba.mnnllm.android.patient.PatientInfoActivity"
android:exported="false"
android:windowSoftInputMode="stateHidden|adjustResize"
android:screenOrientation="portrait" />
</application>
</manifest>

先执行 Application 的 onCreate()

系统创建进程时,会先实例化这个 MnnLlmApplication,然后调用它的 onCreate()。这是整个 App 的入口。
先执行 Application 的 onCreate(),

android:name="com.alibaba.mnnllm.android.MnnLlmApplication"

启动带有 LAUNCHER 的 Activity:MainActivity

<activity
  android:name=".main.MainActivity"
  android:configChanges="orientation|screenSize"
  android:exported="true">
<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

因为只有 MainActivity 同时有:
action = MAIN
category = LAUNCHER

所以点桌面图标时,系统启动的是 MainActivity,依次调用它的:
onCreate(),onStart(),onResume()

ChatActivity / PatientInfoActivity 等,只有在被显式启动时才会执行

ChatActivity 有 MAIN + DEFAULT,但没有 LAUNCHER,不会作为桌面图标的入口,只会在你代码里 startActivity(Intent(this, ChatActivity::class.java)) 时执行它的 onCreate()。

PatientInfoActivity 没有任何 intent-filter,只能在代码里显式 startActivity 时才会执行它的 onCreate()。

应用进程创建 → MnnLlmApplication.onCreate()

点图标启动 → MainActivity.onCreate()

之后在 MainActivity 或别的页面里手动跳转时,才会执行PatientInfoActivity.onCreate() 和 ChatActivity.onCreate()。

posted @ 2026-02-05 11:52  clnchanpin  阅读(13)  评论(0)    收藏  举报