2010-02-15 4 views
0

У меня есть виджет на Android-рынке под названием DigiClock widget, и после последнего обновления у меня были некоторые чрезвычайно редкие и случайные проблемы с корневыми Motorola Droids (могут быть и другие телефоны с проблема, но единственные ответы, которые у меня были, - это укоренившиеся пользователи дроидов). Проблема возникает, когда запускается активность, которая запускает AsyncTask, которая извлекает все установленные приложения с устройства, показывая ProgressDialog (Горизонтальный стиль). Применяемая Java файл кода можно найти здесь:Проблема с AsyncTask на корневом Droid

http://code.google.com/p/android-digiclockwidget/source/browse/trunk/src/com/davidgoemans/simpleClockWidget/LauncherChooser.java

Если вы хотите дифф изменения, сделанные между рабочим и нерабочим версии, которые можно найти здесь:

http://code.google.com/p/android-digiclockwidget/source/diff?spec=svn10&old=7&r=9&format=side&path=/trunk/src/com/davidgoemans/simpleClockWidget/LauncherChooser.java

Что похоже на дроид: * Поле хода всплывает * Поле прогресса увольняется до его окончания * Отображается пустой список

Кажется, что AsyncTask, который извлекает приложения, убивается. Это возможно?

Спасибо, Дэвид

EDIT:

Найдено проблема, оказывается, что в Android 2.0 (не 2.1 или 1.6)

Список пакетов = getPackageManager() getInstalledPackages (PackageManager. .GET_ACTIVITIES);

сбой в моей ситуации, но

Список пакетов = getPackageManager() getInstalledPackages (0).

нет.

+0

у вас нет журнала, когда убита асинхронизация? – pgsandstrom

+0

У меня нет доступа к устройству, где это происходит, поэтому в основном я говорю о словах моих пользователей. – DavidG

ответ

1

Обнаружена проблема, получается, что в Android 2.0 (НЕ 2.1 или 1.6)

List packages = getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES); 

сбой в моей ситуации, но

List packages = getPackageManager().getInstalledPackages(0); 

нет. Я нашел это, протестировав в эмуляторе 2.0. Это добавляет боль в том, что нужно тестировать мое приложение сейчас на 1.5, 1.6, 2.0 и 2.1 вместо обычных случаев:/

2

Я не уверен, является ли это причиной симптомов, но я вижу некоторые проблемы с кодом:

  • Вы не должны манипулировать объектами пользовательского интерфейса, как ваш ProgressDialog из любого потока для основного потока пользовательского интерфейса, кроме , потому что объекты пользовательского интерфейса не являются потокобезопасными. Вместо вызова progressDialog.setProgress() вызовите AsyncTask.publishProgress(), а затем переопределите AsyncTask.onProgressUpdate().

http://developer.android.com/resources/articles/painless-threading.html

  • Кроме того, ваш код не мешает обе нити от доступа "menuEntries" в то же время. Самый простой способ исправить эту часть - переместить вызов setListAdapter() из onCreate() и в onPostExecute().
+0

Вау, спасибо. я не понимал, что ProgressDialog также пострадал. я попробую сегодня вечером и посмотрю, работает ли он. – DavidG

+0

спасибо, но я нашел проблему (см. Выше) – DavidG