Pending Intent перестает работать через несколько часов - PullRequest
0 голосов
/ 23 мая 2019

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

Код работает, и ожидающее намерение отправляет событие широковещательному получателю.Однако через несколько часов он перестает работать.

Я прочитал ожидающий намерения, хранится в оперативной памяти.Очищает ли ОС эти ожидающие события иногда для экономии памяти?Если тогда, как мне обеспечить постоянную работу моего ожидающего намерения?

public void subscribe(Context context){
            List<ActivityTransition> transitions = new ArrayList<>();

            transitions.add(
                    new ActivityTransition.Builder()
                            .setActivityType(DetectedActivity.WALKING)
                            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
                            .build());

            transitions.add(
                    new ActivityTransition.Builder()
                            .setActivityType(DetectedActivity.WALKING)
                            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
                            .build());

            ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);

            Intent intent = new Intent(context, TransitionsReceiver.class);
            intent.setAction(TransitionsReceiver.TRANSITIONS_RECEIVER_ACTION);

            pendingIntent = pendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);

            Task<Void> task =
                    ActivityRecognition.getClient(context)
                            .requestActivityTransitionUpdates(request, pendingIntent);

            task.addOnSuccessListener(
                    new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void result) {
                            Log.i("Shield", "Transitions Api was successfully registered.");
                        }
                    });
            task.addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(Exception e) {
                            Log.e("Shield", "Transitions Api could not be registered: " + e);
                        }
                    });
    }

1 Ответ

0 голосов
/ 23 мая 2019

Это зависит от ПЗУ, установленного на вашем телефоне.У многих есть профили экономии заряда батареи, которые убивают ваше приложение и процессы, которые они покинули, как ваше намерение.

На этом сайте есть инструкции, чтобы этого избежать: https://dontkillmyapp.com/

...