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

10

我是安卓新手。我有一个基于客户端服务器的应用程序。每隔一分钟,服务器都会向客户端发送更新通知,而在客户端方面,我的应用程序接收这些更新并使用Toast显示它们。但现在我的问题是,每当我的客户端应用程序进入后台时,服务器都会继续发送更新通知,并且我的客户端将其显示为应用程序在前台运行一样。我不知道如何检查应用程序是否在后台运行。

4个回答

37

更新,请先查看:

检查Android应用是否在后台运行


要检查您的应用程序是否被发送到后台,您可以在应用程序中的每个活动的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
嗨@peceps,我想告诉你,在Android 4.4(或N5)中,这种方法无法正常工作。 topActivity和context包相等...你能更新一下你的答案吗? - StErMi
@StErMi https://dev59.com/KHA65IYBdhLWcg3wuhIR - Raheel
方法[getRunningTasks(int maxNum)]已在API级别21(LOLLIPOP)中被弃用,出于安全原因,可能会泄露个人信息给第三方应用程序。(如果您使用此方法,请注意它将不受未来Android版本的支持)。 - Fernando Leal
这行代码是做什么的? !topActivity.getPackageName().equals(context.getPackageName()) - Ruchir Baronia

8

如果从该活动启动另一个活动,这也将停用发送通知的功能。 - Aaron Smentkowski
在我的项目中,我有太多的活动,如何知道应用程序在后台运行? - Gevaria Purva

3

仅限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
     }
   }
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接