アプリケーションでbitmapfunプロジェクト ( gridview )を使用していますが、これをテストしているときに問題が見つかりました。この問題を再現する手順は次のとおりです。
- wifiを開く -> アプリを起動 -> 画像をダウンロード (正常に動作します)。
- アプリを閉じて (戻るボタン)、wifi を無効にする -> データ ネットワークを有効にする -> アプリを再起動します (それでも正常に動作します)。
- すべての画像がダウンロードされる前に、アプリを閉じます(戻るボタン)->データネットワークを無効にします-> wifiを有効にします。この手順の後、アプリケーションを再起動すると、画像がダウンロードされません。
logcat では、imageWorker の cancelPotentialWork() ですべての画像がキャンセルされており、開始されていないことがわかります。私の推測では、以前の bitmapworkerTask (ダウンロードを担当) で何かが起こっており、新しいタスクとの衝突が発生しています。私のアプリでは、戻るボタンが押されたときにすべてのキャッシュをクリアします。しかし、これは問題の原因ではありません。元の bitmapfun で同じシナリオをテストしたところ、問題も発生したからです。この問題を解決するにはどうすればよいですか? また、プロジェクトのマルチスレッドasynctaskをシングル スレッドに変更しました。すべてのイメージビュー参照をクリアし、実行中のすべてのタスクをキャンセルする方法はありますか?
私の英語で申し訳ありませんが、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 が開始されないのはなぜですか? コードのシーケンスによると、これは実行する必要がある次の部分です!エラーをどこで検索すればよいか、少なくとも誰かが考えていますか?