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");
}
}
在这个类中,我们重写了 attachBaseContext
和 onCreate
方法,并在静态代码块中添加了日志输出,以便于在应用启动时跟踪执行顺序。
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
类中,同样重写了 attachBaseContext
和 onCreate
方法,并添加了日志输出。
执行顺序
根据上述代码,程序的执行顺序如下:
myApplication
类的静态代码块myApplication
类的attachBaseContext
方法myApplication
类的onCreate
方法MainActivity
类的静态代码块MainActivity
类的attachBaseContext
方法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
类的执行顺序。