当我第一次运行新应用程序时,MainActivity 被创建,然后被销毁,然后再次创建。仅在从 Android studio 安装后首次启动时才会发生这种情况。
MainActivity.kt
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("App-Test", "Main Activity Created")
}
override fun onDestroy() {
super.onDestroy()
Log.d("App-Test", "Main Activity Destroyed")
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</LinearLayout>
AndroidManifest.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">
<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.DummyApp"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.DummyApp">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我尝试过的 它在 Android Studio 的后续启动中运行良好。
通过 adb 安装时也可以正常工作:
./gradlew assembleDebug
./gradlew installDebug
会发生什么
安装时应该只创建一次 MainActivity
仅在从 Android Studio 安装后首次启动时创建、销毁然后再次创建 MainActivity 的行为可能是由于 Android Studio 的即时运行功能所致。
您可以通过在 Android Studio 中禁用即时运行然后再次测试应用程序来验证这一点。