【问题标题】:how to know when the application comes to foreground in android如何知道应用程序何时在android中进入前台
【发布时间】:2013-06-12 18:23:55
【问题描述】:


我正在开发一个 android 应用程序,在该应用程序中,我将 tabhost 用于 tabbar
在每个选项卡中,我都托管了 FragmentActivity,而 FragmentActivity 又托管了不同的片段
我通过网络调用从服务器获取数据,并且在发送每个调用时我必须发送身份验证令牌(我首先进行登录调用)身份验证令牌在 30 分钟后自动过期..
现在的问题是,如果用户在应用程序中间按下主页按钮,应用程序会进入后台,如果用户再次启动应用程序,即把它带到前台(比如 30 分钟或更长时间),同时身份验证令牌会过期然后网络调用失败....
我怎么知道我的应用何时进入前台 ??????????
我已经用谷歌搜索了这个问题,我现在得到的解决方案是

  1. 使用 onCreate()、onPause()、onResume() 方法,但在我的情况下,我有 5 个不同的选项卡,根据此解决方案,我必须检查每个 FragmentActivity 的方法,这些方法不仅在 App 上被调用恢复也是选项卡切换和 FragmentActivities 的初始创建....
  2. 我的第二种方法是使用 ActivityManager

这两种方法都不适合我............ 我在我的应用程序中间,真的需要帮助

【问题讨论】:

  • 当你回到前台时,你的 onResume() 会被调用。但我认为问题在于设计 - 您可能会发现后台服务更适合通信内容
  • 使用已知令牌请求不是更容易吗,如果失败只需请求一个新令牌并从那开始跟进?

标签: android oncreate onresume onpause


【解决方案1】:

使用以下代码:

ActivityManager activityManager = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> services = activityManager
        .getRunningTasks(Integer.MAX_VALUE);
boolean isActivityFound = false;

if (services.get(0).topActivity.getPackageName().toString()
        .equalsIgnoreCase(appContext.getPackageName().toString())) {
    // Your activity is in foreground, do what you've got to do..
}

您需要许可:

<uses-permission android:name="android.permission.GET_TASKS" />

【讨论】:

  • 感谢您的即时回复,但如果我没有错,我将不得不将此代码放在一个始终在 bakcground 中运行的服务中,以检查应用程序是否恢复,而且这种方法是出于调试目的检查 Emil 解决方案 [stackoverflow.com/questions/4414171/… 和他的解决方案上的 cmets
  • 好吧......如果谷歌会在生产模式下拒绝这个功能,所以它并没有真正帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
相关资源
最近更新 更多