MMN-MnnLlmChat 启动顺序解析

AndroidManifest.xml

正常点桌面图标启动 App 时

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

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(),

xml 复制代码
android:name="com.alibaba.mnnllm.android.MnnLlmApplication"

启动带有 LAUNCHER 的 Activity:MainActivity

xml 复制代码
<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()。

相关推荐
小镇学者1 小时前
【PHP】PHP WebShell(网页木马)分析
android·开发语言·php
q***69771 小时前
java进阶1——JVM
java·开发语言·jvm
沐知全栈开发1 小时前
PHP $_GET 变量详解
开发语言
原神启动11 小时前
云计算大数据——shell教程(三剑客之awk)
大数据·开发语言·perl
大雷神1 小时前
HarmonyOS 横竖屏切换与响应式布局实战指南
python·深度学习·harmonyos
钅日 勿 XiName2 小时前
一小时速通pytorch之训练分类器(四)(完结)
人工智能·pytorch·python
加勒比之杰克2 小时前
【C++11】Lambda 表达式、可变参数、emplace_back 系列
开发语言·c++·lambda·emplace_back·可变参数模版
青瓷程序设计2 小时前
水果识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
思成不止于此2 小时前
【C++ 数据结构】二叉搜索树:原理、实现与核心操作全解析
开发语言·数据结构·c++·笔记·学习·搜索二叉树·c++40周年