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 类的执行顺序。

相关推荐
朗迹 - 张伟3 小时前
Tauri2 导出 Android 详细教程
android
lpruoyu3 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
独自破碎E4 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言
李堇7 小时前
android滚动列表VerticalRollingTextView
android·java
lxysbly9 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者812 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码203512 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥12 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓12 小时前
[JDBC]元数据
android
独行soc12 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮