Android AlarmManager и BroadcastReceiver работают в фоновом режиме - PullRequest
1 голос
/ 27 августа 2011

У меня сейчас проблема с интеграцией AlarmManager и BroadcastReceiver.

Я - мое приложение, у меня запущена фоновая служба, которая работает независимо от того, запущено приложение или нет.Я думаю, что эта часть работает нормально.Фоновая служба хранит массив, который изменяется в зависимости от местоположения пользователя.Однако в 8:00 каждый день я хочу, чтобы приложение сбрасывало переменную массива по умолчанию.После долгих поисков в Интернете, похоже, что сделать это можно с помощью AlarmManager (чтобы запускать задачу каждые 8:00) и с помощью BroadcastReceiver (для получения сигнала тревоги и выполнения задачи).код выглядит примерно так:

public class BackgroundService extends Service {

    private ArrayList thisArray;

    private BroadcastReceiver thisReceiver = new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {
            setArrayToDefault();
        }

    }

    @Override
    public void onCreate(){

        super.onCreate();
        Calendar cal = new GregorianCalendar();
        cal.add(Calendar.MINUTE, 2); //example

        this.registerReceiver(thisReceiver, new IntentFilter("BackgroundService"));

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), ONE_MINUTE, "what to put here?"); //example, repeat every minute

    }

    private void setArrayToDefault(){
        //here, the array will be changed back to default values
    }
}

Моя основная проблема заключается в том, как настроить AlarmManager для вызова thisReceiver каждый раз, когда он установлен.Любая идея?Мой подход правильный?

1 Ответ

1 голос
/ 27 августа 2011

Я - мое приложение, у меня запущена фоновая служба, которая работает независимо от того, запущено приложение или нет.

Пожалуйста, не надо.Вот почему пользователи атакуют нас убийцами задач и принудительной остановкой на экране «Управление службами» в «Настройках».

Моя главная проблема заключается в том, как настроить AlarmManager для вызова thisReceiver при каждой его установке.Любая идея?

Вы не регистрируете BroadcastReceiver, поэтому AlarmManager не сможет с ним связаться.

Пожалуйста, пожалуйста, пожалуйста, пожалуйста, пожалуйста, пожалуйста, перепроектируйте ваш сервис такимчто это не должно бежать все время.В любом случае, Android будет убивать ваш сервис из-за старости, поэтому, если вы хотите надежное и стабильное приложение, вам все равно придется сделать этот редизайн.

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