6

アプリケーションでbitmapfunプロジェクト ( )を使用していますが、これをテストしているときに問題が見つかりました。この問題を再現する手順は次のとおりです。

  1. wifiを開く -> アプリを起動 -> 画像をダウンロード (正常に動作します)。
  2. アプリを閉じて (戻るボタン)、wifi を無効にする -> データ ネットワークを有効にする -> アプリを再起動します (それでも正常に動作します)。
  3. すべての画像がダウンロードされる前に、アプリを閉じます(戻るボタン)->データネットワークを無効にします-> wifiを有効にします。この手順の後、アプリケーションを再起動すると、画像がダウンロードされません。

logcat では、imageWorker の cancelPotentialWork() ですべての画像がキャンセルされており、開始されていないことがわかります。私の推測では、以前の bitmapworkerTask (ダウンロードを担当) で何かが起こっており、新しいタスクとの衝突が発生しています。私のアプリでは、戻るボタンが押されたときにのキャッシュをクリアします。しかし、これは問題の原因ではありません。元の bitmapfun で同じシナリオをテストしたところ、問題も発生したからです。この問題を解決するにはどうすればよいですか? また、プロジェクトのマルチスレッドをシングル スレッドに変更しました。すべてのイメージビュー参照をクリアし、実行中のすべてのタスクをキャンセルする方法はありますか?

私の英語で申し訳ありませんが、bitmapfun プロジェクトの性質に関する詳細情報を提供していませんが、それは私の質問を非常に拡張します!何でも聞いてください!

編集: 問題を再現するには、メニュー オプションを使用してアクティビティを終了するたびにキャッシュをクリアすることをお勧めします。また、手順 1 ~ 3 を 1 回実行しても問題が発生するかどうかはわかりません。多分あなたはそれらを繰り返さなければなりません!

Edit2(追加ヘルプ): 問題なくアクティビティを開始すると、最初の画像の logcat は次のようになります。

04-24 02:31:56.400: D/ImageWorker(25625): doInBackground - starting work
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap - https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap, not found in http cache, downloading...

問題のあるアクティビティを開始すると、logcat は次のようになります。

04-24 02:28:07.970: D/ImageWorker(24014): cancelPotentialWork - cancelled work for https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg

cancelPotentialWork が呼び出された 2 番目のケースで doInBackground が開始されないのはなぜですか? コードのシーケンスによると、これは実行する必要がある次の部分です!エラーをどこで検索すればよいか、少なくとも誰かが考えていますか?

4

1 に答える 1

2

あなたに何が起こっても大丈夫です。ImageFetcher は OnCreate() 時に画像を読み込むため、ネットワークの非アクティブ化によってキャンセルされます。自動再起動コードは含まれていません。したがって、ロードの自動再起動が必要な場合は、ネットワークの状態の変化を検出するコードを追加してください。敏感ではないと思います。ユーザーが更新ボタンなどをクリックして再起動できるようにするだけです。

于 2013-04-22T13:50:22.963 に答える