Тревога запускается каждые 5 секунд, а AsyncTask и служба проверяют пороговое значение

Я пишу приложение, которое должно выполнять некоторую работу каждые 5 секунд, если эти вычисления превышают пороговое значение, следует запустить Intent, который загрузит новую активность (или, возможно, если это возможно, активность будет запущена самим процессом) .

До сих пор я использовал подход, описанный в книге Professional Android 2 Application Development от Wrox, в которой говорится, что для обновления данных используются AlarmManager и AsyncTask. http://www.wrox.com/WileyCDA/WroxTitle/Professional-Android-2-Application-Development.productCd-0470565527,descCd-DOWNLOAD.html -> Примеры проектов -> Глава 9 Землетрясение 4

Это то, что у меня есть до сих пор:

  1. Activity.onCreate запускает службу

  2. Метод onCreate из запущенного сервиса устанавливает параметры Alarm с PendingIntent (еще не запускает).

  3. onStartCommand запущенной службы создает тревогу и создает AsyncTask (с выполнением)

  4. AsynchTask.doInBackground выполняет некоторые вычисления, и если порог был пройден, он транслирует новое намерение и пытается остановить тревогу, если порог не пройден, то ничего не делается.

  5. Служба останавливается из onPostExecute AsyncTask.

  6. Метод onReceive BroadcastReceiver обрабатывает PendingIntent из 2) и запускает службу следующим образом:

    Намерение startIntent = новое намерение (контекст, MyService.class);

    контекст.startService(startIntent);

Прямо сейчас Alarm не останавливается, и я не совсем уверен, что это лучшая архитектура для удовлетворения таких потребностей. Можете поделиться опытом? Я знаю о других вариантах, таких как IntentService, Usage of Handlers, Timers, но это тоже чистый способ, но... Высокая ли его производительность? Наилучшие пожелания. Гильермо.


person polonskyg    schedule 25.04.2011    source источник


Ответы (2)


посмотрите на этот класс в java

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html

Я думаю, вы можете использовать!

person user721399    schedule 25.04.2011
comment
Я знаю, что могу использовать класс Thread (из Android). Но я не знаю, какая архитектура лучше всего подходит для моих нужд. Почему использование потоков было бы лучше, чем, например, использование AsyncTask? - person polonskyg; 26.04.2011
comment
Не уверен, поможет ли это, но в этой статье сравниваются различные механизмы выполнения задач в Android: techtej.blogspot.com/2011/03/ - person advantej; 26.04.2011

Используя PendingIntent, который позволяет вам запустить ваш будильник, вы можете вызвать cancel() в AlarmManager, и он остановится.

person Vicente Plata    schedule 25.04.2011
comment
Если порог пройден, я вызываю это: alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Строка ALARM_ACTION = CrashAlarmReceiver.ACTION_CHECK_CRASH_ALARM; Намерение намерениеToCancel = новое намерение (ALARM_ACTION); alarmIntent = PendingIntent.getBroadcast (params [0], 0, intentToCancel, 0); Alarms.cancel(alarmIntent); из doInBackground, но это не останавливается. - person polonskyg; 26.04.2011