Android应用的执行入口

Application 类的使用

在Android应用中,Application 类是应用的入口点之一。它在应用启动时最早执行,通常用于初始化全局状态。为了确保应用在启动时执行自定义逻辑,可以在 AndroidManifest.xml 文件中指定自定义的 Application 类。

示例代码

AndroidManifest.xml 文件中,添加了以下代码来指定自定义的 Application 类:

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" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Okhttp3_Study"
        tools:targetApi="31"
        android:name=".myApplication">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

android:name 属性中指定了自定义的 Application.myApplication

自定义 Application 类

myApplication.java 的代码如下:

java 复制代码
public class myApplication extends Application {

    static {
        Log.d("newfish", "myApplication static");
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        Log.d("newfish", "myApplication attachBaseContext");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("newfish", "myApplication onCreate");
    }
}

在这个类中,我们重写了 attachBaseContextonCreate 方法,并在静态代码块中添加了日志输出,以便于在应用启动时跟踪执行顺序。

MainActivity 类

MainActivity.java 是应用的主活动,它在 Application 类之后执行。其代码如下:

java 复制代码
public class MainActivity extends AppCompatActivity {

    private static String TAG = "learnokhttp";

    static {
        Log.d("newfish", "MainActivity static");
    }

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
        Log.d("newfish", "MainActivity attachBaseContext");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("newfish", "MainActivity onCreate");
        setContentView(R.layout.activity_main);

        Button btn = findViewById(R.id.mybtn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String requestUrl = "https://www.baidu.com/";
                example myexample = new example();
                try {
                    Log.e(TAG, "点击");
                    myexample.run(requestUrl);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

MainActivity 类中,同样重写了 attachBaseContextonCreate 方法,并添加了日志输出。

执行顺序

根据上述代码,程序的执行顺序如下:

  1. myApplication 类的静态代码块
  2. myApplication 类的 attachBaseContext 方法
  3. myApplication 类的 onCreate 方法
  4. MainActivity 类的静态代码块
  5. MainActivity 类的 attachBaseContext 方法
  6. MainActivity 类的 onCreate 方法

日志输出如下:

复制代码
D/newfish: myApplication static
D/newfish: myApplication attachBaseContext
D/newfish: myApplication onCreate
D/newfish: MainActivity static
D/newfish: MainActivity attachBaseContext
D/newfish: MainActivity onCreate

通过分析日志,我们可以清晰地看到应用程序的启动流程,从 Application 类到 MainActivity 类的执行顺序。

相关推荐
独行soc2 小时前
2025年渗透测试面试题总结-18(题目+回答)
android·python·科技·面试·职场和发展·渗透测试
雨白3 小时前
登录和授权:Cookie与Authorization Header机制详解
android
Frank_HarmonyOS3 小时前
【Android -- 多线程】Handler 消息机制
android
一条上岸小咸鱼4 小时前
Kotlin 基本数据类型(一):概述及分类
android·kotlin
没盐水菠萝5 小时前
Android - 动态切换桌面图标
android
AI 嗯啦5 小时前
SQL详细语法教程(三)mysql的函数知识
android·开发语言·数据库·python·sql·mysql
跨界混迹车辆网的Android工程师6 小时前
adb 发送广播
android
超勇的阿杰8 小时前
gulimall项目笔记:P54三级分类拖拽功能实现
android·笔记
峥嵘life9 小时前
Android 欧盟网络安全EN18031 要求对应的基本表格填写
android·安全·web安全
程序员码歌11 小时前
【零代码AI编程实战】AI灯塔导航-从0到1实现篇
android·前端·人工智能