在我的MainActivity中,我首先执行一些检查以确保正确设置了应用程序。我检查以确保从服务器下载了一些初始化数据,并且用户选择了他们的选项。这需要在他们真正开始使用该应用程序之前发生。一旦设置好,它将直接进入正常行为。
如果未正确初始化它们,则激发一个新的Intent以下载数据,然后激发另一个Intent以将它们发送到 Activity 中以进行选择。问题是他们是否在此过程中按了后退按钮。他们返回到MainActivity,但尚未处于显示状态-只是一个空白屏幕。它应该显示其ListView的空 View ,但是由于该片段似乎没有被重新加载(或首先加载),因此不会发生这种情况。
我有一个checkSetup(),应该将它们发送回它们仍然需要完成的设置过程的阶段,但是我无法启动它。我以为通过将其放入onResume()中,可以在恢复 Activity 时随时执行,但从后堆栈恢复 Activity 时,似乎不会触发onResume()。我也尝试过onRestart(),但是没有运气。
有很多文档记录了该 Activity 在被按下后被杀死的情况,但是没有信息(我发现)返回该 Activity 时发生了什么(如果有的话)。
主要 Activity :
public class MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SyncAdapter.initializeSyncAdapter(this);
}
private void loadFragment(){
MyFragment myFragment = ((MyFragment)getSupportFragmentManager()
.findFragmentById(R.id.fragment_1));
if (myFragment == null) {
myFragment = new MyFragment();
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_1, myFragment);
fragmentTransaction.commit();
}
@Override
public void onContentChanged() {
super.onContentChanged();
View empty = findViewById(R.id.empty);
ListView list = (ListView) findViewById(R.id.listview);
list.setEmptyView(empty);
}
@Override
protected void onResume() {
super.onResume();
checkSetup();
loadFragment();
}
void checkSetup(){
//do some checks
}
}
我还尝试了在清单中将MainActivity设置为
singleTop
和singleTask
,但都没有帮助。如果永不调用onResume(),我如何才能使Activity完全重新启动,或者在回按下时调用某项。为什么onResume()在这里不被调用,因为实际上它正在恢复?
UPDATE :
为了澄清起见,序列中调用的其他 Activity 也可以在应用程序的正常操作中调用,因此它们不仅用于初始化过程。
更具体地说:
在设置过程中,这些 Activity 中的每一个都运行checkSetup()方法并定向到适合当前状态的意图。如果在任何时候按下了主页按钮,它将正常工作。问题是当按下后退按钮时,它会返回MainActivity并且永远不会调用checkSetup()。
我宁愿不禁用后退按钮,因为在其他任何时候,它都可以正确使用。
更新2 :
作为一种变通方法,我为所有其他 Activity 添加了对onBackPressed()的checkSetup()调用,但这似乎是一个糟糕的设计。我多余地调用了该方法(在即将结束的Activity中的onBackPressed()中,然后在MainActivity中的onResume()中)调用任何后退按钮。另外,从逻辑和设计的角度来看,它是差的。检查设置与离开其他 Activity 无关。它仅与少数 Activity 的切入点有关,并且仅应在此进行。
因此,我已经开始工作了,但是如果有人提出建议,我将希望有一个更干净的解决方案。或者,任何人都可以解释为什么未在此处调用onResume()的原因。阅读其他相关文章,每个人的第一个建议就是“使用onResume()”,因为这样做很有意义。根据Android生命周期图和文档,在 Activity 可见之前就调用了onResume(),而且我还没有看到任何官方身份对此有例外-只是人们为解决这个问题而奋斗的轶事证据。那么,这是错误还是功能?文档只是次充好,还是我遗漏了一些东西?
最佳答案
因为 Activity 没有停止或破坏,
您可以测试onPause(); onStop();
我认为,如果您知道什么正在运行,您将知道该怎么做
祝好运
关于android - 为什么在按下后退按钮后没有为 Activity 调用onResume(),有什么好的解决方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32294386/