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 分钟前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
何以解忧,唯有..7 分钟前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽16 分钟前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下17 分钟前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗11121 分钟前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言
DJ斯特拉22 分钟前
axios快速使用
开发语言·前端·javascript
xingpanvip33 分钟前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
闵孚龙36 分钟前
《PyTorch 深度修炼》Dataset 和 DataLoader:数据如何喂给模型
人工智能·pytorch·python
于先生吖38 分钟前
教育类Java实战项目:在线错题整理平台分层架构设计与接口源码解析
java·开发语言
goldenrolan41 分钟前
A公司物料替代测试系统 v1.7:从需求到 exe/apk 的 AI 辅助全链路实践
android·自动化测试·软件测试·python·ai