我的应用程序在新推出时会调用一些Web服务。如果用户启动应用程序(在后台运行)并恢复,我还想调用这些Web服务。我已经研究了在启动应用程序和活动聚焦时触发的所有方法。 onStart(),onResume(),onRestart()等....
我认为onRestart是一个很好的选择,可以进行我的网络服务调用并更新我的视图,问题是如果我从活动A(进行呼叫的人)转到活动B并点击后退按钮,活动A将触发onRestart()并调用Web服务。每次我从应用程序中的某些活动返回主屏幕时,我都不希望这种情况发生。如果我的应用程序活动A从外部聚焦,我只希望调用服务。他们应该注意的任何其他事件对我有帮助吗?如果我按下主页按钮,然后点击我的应用程序图标,它应该更新,但如果我点击主屏幕上的内容,打开新活动,然后点击后退按钮,则不会更新。
希望这个问题有道理。
感谢。
答案 0 :(得分:8)
根据Activity lifecycle,我会在onRestart
之前调用onResume
。因此,如果您将网络电话放在onResume
中,则会在活动首次启动时及其恢复时调用。仅当用户导航回该活动时才会调用onRestart
。因此,您可以在活动中使用布尔值(例如布尔值isActivityRestarting)设置为false,然后在onRestart
中设置为true。如果在onResume
被击中时为真,那么请不要进行网络通话。
示例代码:
public void onRestart() {
isActivityRestarting = true;
}
public void onResume() {
if (!isActivityRestarting) {
executeWebCalls();
}
isActivityRestarting = false;
}
答案 1 :(得分:4)
好onCreate
是你最好的选择,但有一些警告。 (这里的主屏幕是调用webservice的屏幕)
onCreate
。onCreate
。onCreate
。到目前为止一切顺利,这就是问题所在。
onCreate
。理论上它是一致的行为,但可能看起来很奇怪,因为用户可能会认为他/她正在启动一个应用程序,从开始忘记他/她最初是如何退出的。对于你的问题,onCreate是进行轻微检查的方法。
使用onStart
或onRestart
解决
您可以执行的一项检查是将时间戳存储在共享首选项中,这与您调用Web服务时相对应。现在,当用户退出(无论是通过HOME还是BACK键)并返回时,您可以检查时间并将其与存储的时间进行比较。如果差异很大,只需进行Web服务调用即可。要完成这项工作,您必须使用onStart
或onRestart
。
答案 2 :(得分:1)
由于这是正常行为(请参阅http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle),我建议不要尝试反对它,而是使用生命周期方法。
无论是来自其他活动还是其他活动,您的应用都将从外部聚焦。
也许您应该调用onCreate
中的服务?