Android: как проверить, работает ли приложение в фоновом режиме - PullRequest
10 голосов
/ 06 июля 2010

Я новичок в Android.У меня есть клиент-серверное приложение.Сервер продолжает отправлять уведомления об обновлениях клиенту через каждую минуту, и на стороне клиента мое приложение получает эти обновления и отображает их с помощью Toast.Но теперь моя проблема в том, что когда клиентское приложение переходит на фоновый сервер, он продолжает отправлять уведомления об обновлениях, и мой клиент отображает его так, как будто приложение находится на переднем плане.Я не понимаю, как проверить, что приложение работает в фоновом режиме.

Ответы [ 4 ]

36 голосов
/ 16 февраля 2012

Обновление, сначала посмотрите это:

Проверка, работает ли приложение 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" />
8 голосов
/ 06 июля 2010

http://developer.android.com/guide/topics/fundamentals.html#lcycles - описание жизненного цикла приложения для Android.

Метод onPause () вызывается, когда действие переходит в фоновый режим. Таким образом, вы можете отключить уведомления об обновлениях этим методом.

2 голосов
/ 31 марта 2016

Только для API уровня 14 и выше

Вы можете использовать ComponentCallbacks2 для activity, service и т. Д.

Пример:

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 голосов
/ 03 ноября 2011

Вы можете использовать getRunningAppProcesses () в ActivityManager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...