Blankj / Blankj/AndroidUtilCode
未解锁状态下拉起activity,因为FBE原因,导致activity发生crash
- Dominant language
- Java
- Stars
- 33.6k
- Forks
- 10.6k
- PR merge metrics
- No merged PRs in 30d
Description
## 重启未解锁状态下启动Activity,会导致因为FBE加密带来的Crash
1. utilcode在Utils.init时会监听activity的生命周期变化
2. 在用户未解锁情况下,拉起一个activity
3. activity启动时走onCreate
4. 当走到监听回调的onActivityCreated#LanguageUtils.applyLanguage(activity)函数时,会调用SPUtils中的实例
5. 但是SPUtils实例中默认用普通Context初始化,并且没有提供输入初始化Context的入口
6. 此时未解锁状态下访问SPUtils,会带来错误堆栈中的`SharedPreferences in credential encrypted storage are not available until after user is unlocked`错误。
** 建议在`onActivityCreated#LanguageUtils.applyLanguage(activity)`中做安全保护,避免产生crash,或者让业务方自己做SPUtils中数据的restore的工作。 **
- AndroidUtilCode 的版本:1.30.6
- 出现 Bug 的设备型号:黑鲨4Pro
- 设备的 Android 版本:Android11
## 代码业务跟出错无关
## 异常堆栈
```
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.blackshark.sharkman/com.blackshark.sharkman.alarm.AlarmAlertFullScreenActivity}: java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3578)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3738)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2174)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8240)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:663)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Caused by: java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:504)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:489)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:199)
at com.blankj.utilcode.util.SPUtils.(SPUtils.java:84)
at com.blankj.utilcode.util.SPUtils.getInstance(SPUtils.java:71)
at com.blankj.utilcode.util.SPUtils.getInstance(SPUtils.java:54)
at com.blankj.utilcode.util.UtilsBridge.getSpUtils4Utils(UtilsBridge.java:518)
at com.blankj.utilcode.util.LanguageUtils.applyLanguage(LanguageUtils.java:231)
at com.blankj.utilcode.util.UtilsActivityLifecycleImpl.onActivityCreated(UtilsActivityLifecycleImpl.java:208)
at android.app.Application.dispatchActivityCreated(Application.java:375)
at android.app.Activity.dispatchActivityCreated(Activity.java:1379)
at android.app.Activity.onCreate(Activity.java:1652)
at androidx.core.app.ComponentActivity.onCreate(ComponentActivity.java:85)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:298)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:273)
at com.blackshark.sharkman.common.base.BaseActivity.onCreate(BaseActivity.kt:36)
at com.blackshark.sharkman.alarm.AlarmAlertFullScreenActivity.onCreate(AlarmAlertFullScreenActivity.kt:42)
at android.app.Activity.performCreate(Activity.java:8249)
at android.app.Activity.performCreate(Activity.java:8221)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3551)
... 11 more
```
## 看堆栈就知道了,很明确的错误
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.