android:如何检查应用程序是否在后台运行

时间:2010-07-06 06:16:24

标签: android

我是android的新手。我有基于客户端服务器的应用。服务器每隔一分钟就会继续向客户端发送更新通知,在客户端,我的应用程序会收到这些更新并使用Toast显示它。但现在我的问题是每当我的客户端应用程序进入后台服务器继续发送更新通知,我的客户端显示它就好像应用程序在前台。我没有得到如何检查该应用程序是否在后台运行。

4 个答案:

答案 0 :(得分:36)

更新,请先查看:

Checking if an Android application is running in the background


要检查您的应用程序是否已发送到后台,您可以在onPause()上针对应用程序中的每项活动调用此代码:

 /**
   * Checks if the application is being sent in the background (i.e behind
   * another application's Activity).
   * 
   * @param context the context
   * @return <code>true</code> if another application will be above this one.
   */
  public static boolean isApplicationSentToBackground(final Context context) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = am.getRunningTasks(1);
    if (!tasks.isEmpty()) {
      ComponentName topActivity = tasks.get(0).topActivity;
      if (!topActivity.getPackageName().equals(context.getPackageName())) {
        return true;
      }
    }

    return false;
  }

为此,您应该在AndroidManifest.xml

中加入此内容
<uses-permission android:name="android.permission.GET_TASKS" />

答案 1 :(得分:8)

http://developer.android.com/guide/topics/fundamentals.html#lcycles是对Android应用程序生命周期的描述。

当活动进入后台时,会调用onPause()方法。因此,您可以在此方法中停用更新通知。

答案 2 :(得分:2)

仅适用于API级别14及以上

您可以将ComponentCallbacks2用于activityservice等。

示例:

public class MainActivity extends AppCompatActivity implements ComponentCallbacks2 {
   @Override
   public void onConfigurationChanged(final Configuration newConfig) {

   }

   @Override
   public void onLowMemory() {

   }

   @Override
   public void onTrimMemory(final int level) {
     if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
        // app is in background
     }
   }
}

答案 3 :(得分:0)

您可以在ActivityManager中使用getRunningAppProcesses()