Как автоматически остановить службу BackGround, когда приложение не используется?

Теперь я продолжаю свою часть уведомлений для того, чтобы использовать BackGround Service в текущей службе, которая будет работать даже после того, как мое приложение будет остановлено, или я использую другое приложение.

Но теперь мне нужно, чтобы если приложение не было активным в течение 5 минут или более, фоновая служба должна автоматически останавливаться.

Я пошел со следующим, но бесполезно, он остается прежним:

public class ForegroundCheckTask extends AsyncTask<Context, Void, Boolean> {

  @Override
  protected Boolean doInBackground(Context... params) {
    final Context context = params[0].getApplicationContext();
    return isAppOnForeground(context);
  }

  private boolean isAppOnForeground(Context context) {
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    if (appProcesses == null) {
      return false;
    }
    final String packageName = context.getPackageName();
    for (RunningAppProcessInfo appProcess : appProcesses) {
      if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
        return true;
      }
    }
    return false;
  }
}

Многое пытался исправить, но остается прежним, есть ли другие пути, пожалуйста, помогите мне, друзья, решить эту проблему.

Обновлено:

 public class ApplicationActivity  implements Application.ActivityLifecycleCallbacks {
        // I use four separate variables here. You can, of course, just use two and
        // increment/decrement them instead of using four and incrementing them all.
        public static int resumed;
        public static int paused;
        public static int started;
        public static int stopped;
    public static boolean stopStatus = false;
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        }

        @Override
        public void onActivityDestroyed(Activity activity) {
        }

        @Override
        public void onActivityResumed(Activity activity) {
            ++resumed;
        }

        @Override
        public void onActivityPaused(Activity activity) {
            ++paused;
            android.util.Log.w("test", "application is in foreground: " + (resumed > paused));
        }

        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
        }

        @Override
        public void onActivityStarted(Activity activity) {
            ++started;
        }

        @Override
        public void onActivityStopped(Activity activity) {
            ++stopped;
            stopStatus = true;
            android.util.Log.w("test", "application is visible: " + (started > stopped));
        }

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        // Simply add the handler, and that's it! No need to add any code
        // to every activity. Everything is contained in MyLifecycleHandler
        // with just a few lines of code. Now *that's* nice.
        registerActivityLifecycleCallbacks(new ApplicationActivity());
    }
}

person Manoj    schedule 26.11.2014    source источник
comment
Это тот сервис, в котором вы написали код?   -  person Larry Schiefer    schedule 26.11.2014
comment
код выше, который я пытался проверить, активно ли приложение   -  person Manoj    schedule 26.11.2014
comment
Если он работает, мне кажется, все в порядке. Вам действительно не нужно регистрировать обратные вызовы жизненного цикла. Вы можете просто переопределить методы onPause и onResume, но это просто мысль. Теперь вам нужен способ запланировать остановку службы.   -  person Zielony    schedule 26.11.2014
comment
можете ли вы дать мне какую-либо ссылку или можете ли вы провести меня через какие-либо образцы   -  person Manoj    schedule 26.11.2014


Ответы (2)


Я бы пошел с другим подходом:

  • Используйте методы onPause и onResume для отслеживания состояния вашей деятельности.
  • Когда ваша последняя активность приостанавливается, запустите задачу таймера с 5-минутной задержкой.
  • В задании остановить службу.
  • Если вы нажмете метод onResume и задача не равна нулю, очистите задачу.
person Zielony    schedule 26.11.2014
comment
позвольте мне попробовать и узнать для вас - person Manoj; 26.11.2014
comment
запустить задачу таймера с 5-минутной задержкой для этого, я должен взять системное время и сделать это - person Manoj; 26.11.2014
comment
я хочу это для всего моего приложения - person Manoj; 26.11.2014
comment
позвольте мне отредактировать вопрос выше, который я пробовал, пожалуйста, посмотрите и исправьте меня, есть ли что-то неправильное - person Manoj; 26.11.2014
comment
можете ли вы увидеть мой обновленный код, выше которого я пытался получить все состояние приложения и исправить его там, где это необходимо. - person Manoj; 26.11.2014
comment
stackoverflow.com/questions/27166912/ - person Manoj; 27.11.2014
comment
я пытаюсь проверить, все ли действия или обнаружение или нет - person Manoj; 27.11.2014
comment
здесь я разместил вопрос, чтобы проверить, активно ли приложение или нет - person Manoj; 27.11.2014

До сих пор не совсем понятно, что вы пытаетесь сделать и почему. Если ваша служба является подклассом Service, она может останавливаться сама или ваши действия могут останавливать ее явно. Если ваши действия связаны с ним, а не с вызовом startService(), система может автоматически остановить службу после того, как все клиенты будут отключены. Android устроен так, что может запускать и останавливать их по мере необходимости. Обратите внимание, что даже если ваша служба и все действия остановлены, процесс вашего приложения будет продолжаться до тех пор, пока системе не потребуются ресурсы.

person Larry Schiefer    schedule 26.11.2014
comment
На самом деле то, что я пытаюсь, заключалось в том, что в настоящее время в моем сервисе приложений работает даже после того, как я выхожу из своего приложения, именно то, что мне нужно, это то, что мой сервис должен автоматически останавливаться, когда приложение не активно более 5 минут (т.е.), как уведомление Facebook, которое приходит, даже если мы не входим в мое приложение - person Manoj; 26.11.2014
comment
Смотрите мой ответ выше. Ваша служба должна будет определить, что все действия прекратились, и через 5 минут позвонить stopSelf(). Такая служба, как Facebook, не останавливается, когда действие прекращается. Он продолжает работать, чтобы получать уведомления и использовать те же учетные данные для входа (токен), что и действие. - person Larry Schiefer; 26.11.2014
comment
позвольте мне попробовать и узнать для вас - person Manoj; 26.11.2014
comment
stackoverflow.com/questions/27166912/ - person Manoj; 27.11.2014
comment
@ Ларри Шифер stackoverflow.com/questions/27166912/ - person Manoj; 27.11.2014
comment
я пытаюсь проверить, все ли действия или обнаружение или нет - person Manoj; 27.11.2014
comment
в приведенной выше ссылке я разместил вопрос, чтобы проверить, активно ли приложение или нет - person Manoj; 27.11.2014