我知道这个问题对stackoverflow来说并不新鲜,但是我仍然很困惑。所以请不要将此问题标记为重复,请帮助我!
我的 android 应用程序有很多活动。当我的应用程序进入前台并需要调用另一个 Web 服务时,当我的应用程序切换到后台时,我需要调用 Web 服务。
我的初步发现是:
- 我阅读了活动生命周期http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle并意识到我可以在
- onPause() = 当应用程序切换到后台时
- onResume() = 当应用程序切换到前台时。
我的活动:
protected void onPause()
{
AppUtil.trackAppBackgroundStatus(this);
super.onPause();
}
protected void onResume()
{
super.onResume();
AppUtil.trackAppForegroundStatus(this);
}
我的实用程序类:
public class AppUtil
{
public static void trackAppForegroundStatus(Context theContext)
{
SharedPreferences aSharedSettings = theContext.getSharedPreferences("MyAppPreferences", Context.MODE_PRIVATE);
String aAppStatus = aSharedSettings.getString("appStatus", "");
if(!aAppStatus.equals("foreground"))
{
SharedPreferences.Editor aPrefEditor = aSharedSettings.edit();
aPrefEditor.putString("appStatus", "foreground");
aPrefEditor.commit();
trackSession(theContext, "foreground");
}
}
public static void trackAppBackgroundStatus(Context theContext)
{
SharedPreferences aSharedSettings = theContext.getSharedPreferences("MyAppPreferences", Context.MODE_PRIVATE);
String aAppStatus = aSharedSettings.getString("appStatus", "");
if(!aAppStatus.equals("background"))
{
SharedPreferences.Editor aPrefEditor = aSharedSettings.edit();
aPrefEditor.putString("appStatus", "background");
aPrefEditor.commit();
trackSession(theContext, "background");
}
}
}
trackSession 方法将跟踪我的应用程序的前台和后台状态。
缺点: 如上所述,我的应用程序有各种活动。所以考虑我有 Page_A 和 Page_B。
在 Page_A 中,在 onCreate() 方法调用之后,控制转到 onResume() 并跟踪我的应用程序在前台。当我移动到下一页 (Page_B) 时,调用 Page_A 的 onPause() 方法并跟踪我的应用程序切换到后台。
我不想通过每个活动来跟踪它。我只需要在我的应用程序进入后台时跟踪我的应用程序的后台状态(也就是说,只有当用户按下主页按钮并且我的应用程序切换到后台时)。
- 我还尝试了检查 Android 应用程序是否在后台运行,并且发生了同样的情况
- getRunningTasks()将解决我的问题。但是,请阅读,Google 可能会拒绝使用 ActivityManager.getRunningTasks() 的应用程序。
任何人都可以请指导我。基本上,我需要调用 2 个网络服务。一是当应用程序进入前台时,二是当应用程序切换到后台时。
如果无法针对应用程序进行这些调用,我该如何更新上面的代码来处理它们。
请提供任何帮助。