如何在打开应用程序后仅重新创建一次 activity?

How do I recreate the activity only once after opening the application?

如何在打开应用程序后仅重新创建一次 activity?

我试过这样做,但没有成功。无休止地重新创建()

onCreate

中的refreshLang()
private fun refreshLang() {
    PreferenceManager.getDefaultSharedPreferences(this).apply {
        val checkRun = getString("FIRSTRUN", "DEFAULT")
        if (checkRun == "YES") {
            PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("FIRSTRUN", "NO").apply()
            recreate()
        }
    }
}

SharPref.putString("FIRSTRUN", "YES").apply() 在 onDestroy 中让它在你下次 运行 时再次工作它。

使用 onResume 方法

 @Override
    public void onResume() {
        super.onResume();  // Always call the superclass method first
  
    }

请参考:Activity class recreate()

它创建新实例并启动新的 activity 生命周期。

因此,当您调用 recreate() 时,它会调用 onCreate() 并进入无限循环。

您已添加一些条件来避免此溢出。

编辑:

使用.equals代替==

if ("YES".equals(checkRun)) {
   PreferenceManager.getDefaultSharedPreferences(this@MainActivity).edit().putString("FIRSTRUN", "NO").apply()
   recreate()
}

我建议你不要使用recreate()。它将调用 onCreateonDestory().

参考下面的代码。

protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        boolean recreateRequested = true;
        Intent currentIntent = getIntent();
        if (currentIntent.hasExtra("recreateRequested")){
            recreateRequested = currentIntent.getBooleanExtra("recreateRequested", true);
        }
        if (recreateRequested) {
            Intent intent = new Intent(this, MyActivity.class);
            intent.putExtra("recreateRequested", false);
            startActivity(intent);
            finish();
        }
    }

你不能在你的if条件

中比较两个这样的String
checkRun == "YES"

这是 String 的两个独立实例,因此它们在 this 含义上永远不相等(== - 相同的对象)

改用这个

"YES".equals(checkRun)

equals 将比较比较对象的“内容”,在 String 情况下它将比较文本