簡體   English   中英

android:如何檢查應用程序是否在后台運行

[英]android:how to check if application is running in background

我是android的新手。 我有基於客戶端服務器的應用。 服務器每隔一分鍾就會繼續向客戶端發送更新通知,在客戶端,我的應用程序會收到這些更新並使用Toast顯示它。 但現在我的問題是每當我的客戶端應用程序進入后台服務器繼續發送更新通知,我的客戶端顯示它就好像應用程序在前台。 我沒有得到如何檢查該應用程序是否在后台運行。

更新,請先看看:

檢查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" />

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

當活動進入后台時,會調用onPause()方法。 因此,您可以在此方法中停用更新通知。

僅適用於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
     }
   }
}

您可以在ActivityManager中使用getRunningAppProcesses()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM