onRestart()在返回button时被调用,有什么办法来防止这个?

新应用程序启动时,我的应用程序会调用一些Web服务。 我也想调用这些Web服务,如果用户启动应用程序(这是在后台运行),并恢复。 我已经研究了应用程序启动时以及活动焦点时所激发的所有方法。 onStart(),onResume(),onRestart()等….

我认为在重新启动会是一个很好的打赌,使我的Web服务调用和更新我的看法,问题是,如果我从活动A(拨打电话)到活动B并点击后退button,活动A将触发onRestart()并调用Web服务。 我不想每次从我的应用程序的某些活动回到我的主屏幕时发生这种情况。 我只希望如果我的应用程序活动A从外部引起焦点,就会调用这些服务。 他们应该知道的其他事件可以帮助我吗? 如果我点击主页button,然后点击我的应用程序图标,它应该更新,但不是如果我点击我的主屏幕上的东西,打开一个新的活动,然后点击后退button。

希望这个问题是有道理的。

谢谢。

Solutions Collecting From Web of "onRestart()在返回button时被调用,有什么办法来防止这个?"

根据Activity生命周期 , onRestart将在onResume之前调用。 所以如果你把你的networking电话放在onResume ,它会在活动第一次启动并且任何时候恢复时被调用。 onRestart仅在用户导航回到该活动时才被调用。 所以你可以在你的activity中设置一个布尔值(例如boolean isActivityRestarting),设置为false,然后在onRestart设置为true。 如果在onResume被击中的时候是真的,那么不要打你的networking电话。

示例代码:

 public void onRestart() { isActivityRestarting = true; } public void onResume() { if (!isActivityRestarting) { executeWebCalls(); } isActivityRestarting = false; } 

那么onCreate是你最好的select,但有一些警告。 (这里的主屏幕是调用web服务的屏幕)

  • 如果用户在主屏幕上按BACKbutton, onCreate将被调用。
  • 如果用户在另一个屏幕上按BACKbutton并返回到主屏幕,则不会调用onCreate
  • 如果用户使用HOMEbutton退出主屏幕,并长按HOMEbutton并select您的应用程序,则不会调用onCreate

到目前为止好,这里是抓住。

  • 如果用户按HOMEbutton退出,然后进入启动器图标,则不会调用onCreate 。 从理论上讲,这是一致的行为,但可能看起来很奇怪,因为用户可能会认为他/她从一开始就启动了一个应用程序,忘记了他/她最初如何退出。

对你来说,onCreate是轻微检查的方法。

onRestart如果使用onStartonRestart

您可以执行的一项检查是将时间戳存储在“共享首选项”中,这与您调用Web服务时相对应。 现在,当用户退出(无论是通过HOME还是BACK键),然后回来,你可以检查时间,并与存储的时间进行比较。 如果差异很高,只需进行web服务调用即可。 为了使这个工作,你必须使用onStartonRestart

由于这是正常行为(请参阅http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle )我build议不要试图对付它,而是使用生命周期方法。

无论是从其他活动还是其他活动,您的应用都将从外部引起注意。

也许你应该在onCreate调用服务?