2010-03-04 6 views
1

Я пишу виджет главного экрана после урока Джеффа Шейки, http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html.Можно ли использовать Thread вместо службы в Android-виджетах Android?

В этом учебном пособии используется сервис, чтобы избежать любых тайм-аутов ANR. Я просто удивляюсь, могу ли я использовать Thread вместо службы, чтобы выполнять работу по получению данных и обновлению RemoteView? Я не хочу создавать службу, потому что Thread проще обрабатывать и передавать данные в Thread.

Спасибо.

ответ

4

Вы не должны полагаться на нить. Не гарантируется работа. Из опыта в подобной ситуации подход нити работал на эмуляторе и галактике samsung, но не надежно на g1. Поэтому вы должны попытаться использовать сервис. Это довольно просто: определите в своем манифесте и startService. Немного более громоздко передавать данные с помощью намерения, но это управляемо, и весь подход определенно более устойчив.

+0

Гарантировано * не * для работы. – CommonsWare

+0

Означает ли это, что нить не работает на Android или просто не работает для виджета на главном экране? Какова наилучшая практика для виджета главного экрана, только сервис или сервис + поток? Мне нужно загрузить данные из Интернета, чтобы обновить экран виджета, я должен избегать тайм-аутов ANR. Я протестировал сервис + нить и поток только на симуляторе и HTC Hero. Он работает нормально. Если он не будет работать на других устройствах, я откажусь от идеи потока. – user256239

+1

Просьба ознакомиться с жизненными циклами процесса: http://developer.android.com/intl/de/guide/topics/fundamentals.html#proclife Обратите внимание, что если у вас нет компонентов, работающих в вашем процессе (переднего плана, получает в onReceive(), запущенные службы или клиенты переднего плана ваших поставщиков контента), тогда ваш процесс считается системой пустой и может быть убит в любое время. – hackbod

3

Я прочитал статью, в которой говорится, что, чтобы избежать ANR, обслуживания иногда недостаточно. Поток нужен.

См:. http://blog.elsdoerfer.name/2009/06/03/writing-an-android-widget-what-the-docs-dont-tell-you/

«вам предлагается использовать службу для выполнения ваших виджетов обновления, если вы делаете что-нибудь, что может занять немного больше времени для того, чтобы избежать применения не отвечает (ANR) таймауты Однако, этого обычно недостаточно. ......

Решение заключается в том, чтобы ваша служба запускала отдельный поток. Например, см. «Виджет Джеффри Шарки и андроида».

Любые мысли?

Смежные вопросы