【问题标题】:onResume not called after recreate in Activity在 Activity 中重新创建后未调用 onResume
【发布时间】: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。

标签: android onresume onactivityresult 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() 解决了这个问题。

【讨论】:

  • 很高兴你修好了 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
相关资源
最近更新 更多