onRestart()在后退按钮命中时被调用,有什么方法可以防止这种情况发生?

Pau*_*ulG 9 android onresume

我的应用程序在新推出时会调用一些Web服务.如果用户启动应用程序(在后台运行)并恢复,我还想调用这些Web服务.我已经研究了在启动应用程序和活动聚焦时触发的所有方法.onStart(),onResume(),onRestart()等....

我认为onRestart是一个很好的选择,可以进行我的网络服务调用并更新我的视图,问题是如果我从活动A(进行呼叫的那个)转到活动B并点击后退按钮,活动A将触发onRestart()并调用Web服务.每次我从应用程序中的某些活动返回主屏幕时,我都不希望这种情况发生.如果我的应用程序活动A从外部聚焦,我只希望调用服务.他们应该注意的任何其他事件对我有帮助吗?如果我点击主页按钮然后点击我的应用程序图标它应该更新,但是如果我点击主屏幕上的内容,打开新活动然后点击后退按钮则不会.

希望这个问题有道理.

谢谢.

Jas*_*son 8

根据Activity生命周期,onRestart之前会调用onResume.因此,如果您将Web调用放入其中onResume,则会在活动首次启动时以及每次恢复时调用它.onRestart仅在用户导航回该活动时调用.因此,您可以在活动中使用布尔值(例如布尔值isActivityRestarting),该布尔值设置为false,然后设置为true onRestart.如果onResume击中时为真,则不要进行网络通话.

示例代码:

public void onRestart() {
    isActivityRestarting = true;
}

public void onResume() {
    if (!isActivityRestarting) {
        executeWebCalls();
    }

    isActivityRestarting = false;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的回复.这不行.我正在打开每个调用onResume()onStart()onRestart()onStop()onPause()等从我的所有活动到日志.这是我最初的问题,如果我从我的主屏幕(Web服务调用屏幕)点击某些内容并打开活动B,然后点击BACK它将触发以下方法:onRestart()onStart()onResume()按此顺序.因此,根据您的答案中的逻辑,它将以任何方式调用Web服务. (2认同)