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

相关推荐
B.-1 小时前
Flutter 应用在真机上调试的流程
android·flutter·ios·xcode·android-studio
有趣的杰克1 小时前
Flutter【04】高性能表单架构设计
android·flutter·dart
大耳猫7 小时前
主动测量View的宽高
android·ui
帅次9 小时前
Android CoordinatorLayout:打造高效交互界面的利器
android·gradle·android studio·rxjava·android jetpack·androidx·appcompat
枯骨成佛10 小时前
Android中Crash Debug技巧
android
kim565915 小时前
android studio 更改gradle版本方法(备忘)
android·ide·gradle·android studio
咸芝麻鱼15 小时前
Android Studio | 最新版本配置要求高,JDK运行环境不适配,导致无法启动App
android·ide·android studio
无所谓จุ๊บ15 小时前
Android Studio使用c++编写
android·c++
csucoderlee16 小时前
Android Studio的新界面New UI,怎么切换回老界面
android·ui·android studio
kim565916 小时前
各版本android studio下载地址
android·ide·android studio