【问题标题】:Why SavedInstanceState is not null in activity after changing device language while the app is in background?为什么在应用程序处于后台时更改设备语言后,SavedInstanceState 在活动中不为空?
【发布时间】:2023-12-21 03:39:01
【问题描述】:

我为我的应用创建了一个新 Activity,并实现了一个 BroadcastReceiver 来处理设备语言更改,当用户将应用置于后台并更改语言时,应该重新创建该 Activity。我在我的活动中的 onCreate 中调用此方法,并在调用 languageReceiver() 之前检查 savedInstanceState 是否为 null,但是当我更改语言时,savedInstanceState 不为 null 并且不调用该方法...

setupLangReceiver() 方法

private fun setupLangReceiver(): BroadcastReceiver? {
    if (mLangReceiver == null) {
        mLangReceiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                recreateActivity(intent)
            }
        }
        registerReceiver(mLangReceiver, IntentFilter(Intent.ACTION_LOCALE_CHANGED))
    }
    return mLangReceiver
}

recreateActivity() 方法

 private fun recreateActivity(intent: Intent) {
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
    finish()
    overridePendingTransition(0, 0)
    startActivity(intent)
    overridePendingTransition(0, 0)
}

SetupLangReceiver 方法调用

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_prb_module)
    ThemeUtils.onActivityCreateSetTheme(this)

    if (savedInstanceState == null) {
        setupLangReceiver()
    }

【问题讨论】:

    标签: android kotlin android-activity broadcastreceiver android-savedstate


    【解决方案1】:

    您更改系统语言后,您的应用程序可以由系统重新创建。系统自动保存活动状态。所以你可以oververide方法onSaveInstanceState

    【讨论】:

    • 我应该在那个方法里面做什么?你能给我一个代码示例吗?谢谢。
    • 如果更改 sys 语言,该活动将被系统杀死。因此,您的活动将在方法 onSaveInstanceState 中保存状态,您可以在此处查看文档 (developer.android.com/reference/android/app/…)
    最近更新 更多