Domanda

Ho un widget sul market Android chiamato DigiClock widget, e dopo l'ultimo aggiornamento ho avuto alcuni molto rari e casuali problemi sul radicata Motorola Droid ( ci possono essere altri telefoni con il problema, ma le uniche risposte che ho avuto sono radicati droid utenti ).Il problema si verifica quando un'attività viene avviata l'esecuzione di un AsyncTask che recupera tutte le applicazioni installate dal dispositivo, mentre mostra una ProgressDialog ( Orizzontale stile ).Applicabile il codice java file può essere trovato qui:

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

Se si desidera diff i cambiamenti tra un lavoro e non-lavoro, versione, che può essere trovato qui:

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

Ciò che sembra accadere sul droid è:* I progressi nella finestra di pop up * Finestra di avanzamento respinge prima che sia terminata l'esecuzione * Vuoto lista

Sembra che l'AsyncTask che recupera le applicazioni è di ottenere ucciso.È possibile questo?

Grazie, David

MODIFICA:

Trovato il problema, scopre che in Android 2.0 ( NON 2.1 o 1.6 )

La lista dei pacchetti = getPackageManager().getInstalledPackages(chiamata dell'amministratore pacchetti.GET_ACTIVITIES);

si blocca nella mia situazione, ma

La lista dei pacchetti = getPackageManager().getInstalledPackages(0);

non.

È stato utile?

Soluzione 2

Trovato il problema, scopre che in Android 2.0 ( NON 2.1 o 1.6 )

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

si blocca nella mia situazione, ma

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

non.Ho trovato questo test 2.0 emulatore.A questo si aggiunge il dolore di dover provare la mia app su 1.5, 1.6, 2.0 e 2.1 invece di frangia casi :/

Altri suggerimenti

Io non sono certo se è la causa dei sintomi, ma vedo alcuni problemi con il codice:

  • Non si deve manipolare gli oggetti dell'interfaccia utente come il ProgressDialog da qualsiasi thread tranne che per l'interfaccia utente principale del thread, perché gli oggetti dell'interfaccia utente non sono thread-safe.Invece di chiamare progressDialog.setProgress(), chiamata AsyncTask.publishProgress() e poi sovrascrivere AsyncTask.onProgressUpdate().

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

  • Inoltre, il tuo codice non impedisce di entrambi i thread l'accesso "menuEntries" allo stesso tempo.Il modo più semplice per risolvere questa parte sarebbe quello di spostare la chiamata a setListAdapter() di onCreate() e in onPostExecute().
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top