在我的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设置为singleTopsingleTask,但都没有帮助。

如果永不调用onResume(),我如何才能使Activity完全重新启动,或者在回按下时调用某项。为什么onResume()在这里不被调用,因为实际上它正在恢复?

UPDATE :
为了澄清起见,序列中调用的其他 Activity 也可以在应用程序的正常操作中调用,因此它们不仅用于初始化过程。

更具体地说:
  • 从服务器下载支持的语言列表。这是应该发生的第一件事,并且仅应在第一次运行时发生。但是会在用户擦除数据等情况下每次检查一次。
  • 然后,用户选择
  • 他们想要安装/下载的各种语言。这必须在安装时进行,但是他们以后可以选择添加/删除语言,因此它不仅在安装过程中使用。
  • 然后,用户选择其 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/

    10-15 07:34