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

相关推荐
yuanManGan5 小时前
走进Linux的世界:初识操作系统(Operator System)
android·linux·运维
叶羽西5 小时前
Android15跟踪函数调用关系
android
消失的旧时光-19437 小时前
webView 的canGoBack/goBack 回退栈
android·webview
SHEN_ZIYUAN7 小时前
Flow 责任链模式图解
android
沐怡旸9 小时前
【底层机制】LeakCanary深度解析:从对象监控到内存泄漏分析的完整技术体系
android·面试
又菜又爱coding9 小时前
Android + Flutter打包出来的APK体积太大
android·flutter
LiuYaoheng9 小时前
【Android】Drawable 基础
android·java
Jerry11 小时前
构建 Compose 界面
android
Y多了个想法11 小时前
Linux驱动开发与Android驱动开发
android·linux·驱动开发
2501_9160074714 小时前
从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
android·学习·ios·小程序·uni-app·iphone·xcode