Android Asynctask vs Runnable vs timertask vs Service - PullRequest
18 голосов
/ 30 ноября 2010

Чем отличаются эти методы (классы)?

Я хочу запускать приложение, которое запускается каждые 5 секунд, очищать память после ее завершения и когда процессор находится в режиме ожидания, чтобы вы могли запустить приложение. Так что приложение не связано с wakelock.

С уважением,

Шафкату

1 Ответ

31 голосов
/ 14 августа 2011

Разница между первыми тремя - это просто объем работы, которая была проделана для вас.А Служба является основным компонентом приложения Android .

AsyncTask для удобствакласс для выполнения некоторой работы над новым потоком и использования результатов в потоке, из которого он был вызван (обычно поток пользовательского интерфейса), когда закончите.Это просто оболочка, которая использует несколько исполняемых файлов, но обрабатывает все тонкости создания потока и обработки сообщений между потоками.

Интерфейс Runnable находится наядро Java многопоточности.Интерфейс Runnable должен быть реализован любым классом, экземпляры которого предназначены для выполнения потоком.

TimerTask является частью стандартной Javaи может использоваться для отложенного или повторного выполнения некоторого фрагмента (Runnable) кода.Его использование не рекомендуется на Android .Вместо этого вы можете использовать Обработчик.

Служба может использоваться как независимая и не связанная с пользовательским интерфейсом часть вашего приложения для Android.Он может запускать и создавать свои собственные потоки и может запускаться для пользовательского интерфейса или с помощью Intents через, например, AlarmManager .

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

AlarmManager позволяет транслировать Интенты с заданными интервалами и даже позволяет контролироватьразбудить устройство или нет.Вам просто нужно определить BroadcastReceiver в вашем Сервисе и объявить его в своем манифесте.

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

...