在 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】:我终于通过从SettingsActivity
向MainActivity
中的BroadcastReciever
发送广播并在onRecieve()
中调用recreate()
解决了这个问题。
【讨论】:
很高兴你修好了 :)以上是关于在 Activity 中重新创建后未调用 onResume的主要内容,如果未能解决你的问题,请参考以下文章
Android 重学系列 WMS在Activity启动中的职责 计算窗体的大小(四)
更改语言环境后未调用 onConfigurationChange