0

DigiClock ウィジェットと呼ばれる Android マーケットのウィジェットを持っています。最後の更新後、ルート化された Motorola Droid で非常にまれでランダムな問題が発生しています (問題のある他のハンドセットがあるかもしれませんが、唯一の応答は私です。ルート化されたドロイドユーザーからのものでした)。この問題は、ProgressDialog (水平スタイル) を表示しながら、インストールされているすべてのアプリケーションをデバイスから取得する AsyncTask を実行するアクティビティが起動されたときに発生します。該当する Java コード ファイルは次の場所にあります。

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 が殺されているようです。これは可能ですか?

ありがとう、デビッド

編集

問題が見つかりました.Android 2.0(2.1または1.6ではありません)であることが判明しました

パッケージの一覧表示 = getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);

私の状況ではクラッシュしますが、

パッケージの一覧表示 = getPackageManager().getInstalledPackages(0);

しません。

4

2 に答える 2

2

それが症状の原因であるかどうかは定かではありませんが、コードにいくつかの問題があることがわかります。

  • UI オブジェクトはスレッドセーフではないため、メイン UI スレッド以外のスレッドから ProgressDialog などの UI オブジェクトを操作してはなりません。progressDialog.setProgress() を呼び出す代わりに、AsyncTask.publishProgress() を呼び出してから、AsyncTask.onProgressUpdate() をオーバーライドします。

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

  • また、コードは、両方のスレッドが同時に「menuEntries」にアクセスすることを妨げません。この部分を修正する最も簡単な方法は、setListAdapter() への呼び出しを onCreate() から onPostExecute() に移動することです。
于 2010-02-15T14:50:43.520 に答える
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 でアプリをテストする必要があるという苦痛を追加します:/

于 2010-02-15T17:08:16.573 に答える