在 Activity 中重新创建后未调用 onResume

Posted

技术标签:

【中文标题】在 Activity 中重新创建后未调用 onResume【英文标题】:onResume not called after recreate in Activity 【发布时间】:2016-06-04 11:08:48 【问题描述】:

当在应用设置中进行某些更改时,我在 onActivityResult 中的 MainActivity 中调用 recreate。娱乐后,onResume 不会被调用。

我也遇到了错误:

E/ActivityThread: Performing pause of activity that is not resumed

从this的问题,我了解到不能从onResume调用这个函数。但我是从onActivityResult 给他们打电话的。还使用处理程序调用recreate 解决了问题,但会导致闪烁对用户来说看起来很糟糕。这里可能有什么问题?我如何在没有Handler 的情况下使用recreate

任何想法都会受到赞赏。谢谢!

【问题讨论】:

添加一些代码,以便人们可以真正帮助您。 我应该在这里放什么?我认为这个问题已经足够明确了。 把OnActivityResult的代码放在这里 我只是在检查 requestcode 和 resultcode 并在那里调用 recreate。 【参考方案1】:

OnActivityResult() 在 onResume() 之前调用。您可以做的是在 OnActivityResult() 中设置一个标志,您可以在 onResume() 中检查该标志,如果标志为真,您可以重新创建活动。

您实际上可以做的是完成活动并开始相同的活动,而不是重新创建它。你会得到同样的效果。可能是这样的:

public class MainActivity extends AppCompatActivity   

private boolean shouldRecreate = false;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("AG", "onCreate() called");
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivityForResult(intent, 0);


@Override
protected void onResume() 
    super.onResume();
    if (shouldRecreate)
        finish();
        startActivity(new Intent(this, MainActivity.class));
    


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 0)
        shouldRecreate = true;
    


【讨论】:

我应该检查什么样的标志?你能举个例子吗? 制作自己的标志,例如 shouldRecreate (bool)。如果条件是您想要的条件,则在 OnActivityResult() 中将 shouldRecreate 设置为 true。然后在 onResume 中检查 shouldRecreate == true,如果是,则调用 recreate 方法。 我在 onActivityResult 中设置了标志,并在 onResume 中检查了它。错误仍然存​​在。 如果为 true,请确保将 false 设置为 shouldRecreate。这样当evr onresume 调用.it 时就不会再调用了。 好的,但它不应该至少第一次显示错误。但它仍在显示。【参考方案2】:

我终于通过从SettingsActivityMainActivity 中的BroadcastReciever 发送广播并在onRecieve() 中调用recreate() 解决了这个问题。

【讨论】:

很高兴你修好了 :)

以上是关于在 Activity 中重新创建后未调用 onResume的主要内容,如果未能解决你的问题,请参考以下文章

Android 重学系列 WMS在Activity启动中的职责 计算窗体的大小(四)

更改语言环境后未调用 onConfigurationChange

Activity的生命周期

Android 面试之必问Android基础

重新加载数据后未调用 UICollectionView 数据源方法

1.4.4 重新创建Activity