舊有app在Android 12 閃退問題& app Splash screens
現在越來越多手機開始轉成android 12. 於是我就把target sdk = 31 試試看.
android {defaultConfig {
targetSdkVersion 31
}
}
結果舊有的app都開始發生了閃退現象.
就有使用者跟我反映app當機問題出現.因為這屬於不可歸咎app設計的問題..必須要在android 12的機器上跑才會發生,而且android developer console中Pre-launch report 也沒測試出問題.
但一跑android 12模擬器就會發生當機,所以真的會有問題.
只能說寫app要處理的突發情況有很多,這是其一.
android app發佈控制台好的地方是當你上傳apk時,他都會幫你自動做Pre-launch 測試.----
error message:
java.lang.IllegalArgumentException: com.mark.electricitybillcalculator: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
Solution:
修正android 12上當機閃退問題(Fixed app crash issue on android 12 devices)
在 app\build.gradle 的 dependencies 增加:
//最新版本可參考此連結
dependencies {
def work_version = "2.7.0"
// (Java only)
implementation "androidx.work:work-runtime:$work_version"
// Kotlin + coroutines
implementation "androidx.work:work-runtime-ktx:$work_version"
}
----
android 12 new Splash screens feature: app起動畫面
在解上面閃退的問題時,發現android 12多新增了新功能Splash screens:
用這個後會比較好,有個統一的實作規範,由android控制,將來更新會方便很多.且admob的open ads也要求要有起動畫面.
1.add dependencies:
...
implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'
}
<manifest>
<application android:theme="@style/Theme.App.Starting">
<!-- or -->
<activity android:theme="@style/Theme.App.Starting">
4.在 起動 Activity 的 setContentView()之前一行新增setContentView()..
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Handle the splash screen transition.
SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
setContentView(R.layout.main_activity);
}
}
非常簡易就可設定好SplashScreen,不用寫一大堆程式碼.
留言
張貼留言