指定された間隔のループで画像を表示するために使用されるハンドラーがあります。最後の画像に到達すると、正しい最初の画像に戻ります。ただし、一部のデバイスがクラッシュし、CPU使用率が大幅に上昇するため、問題が発生しています。コードの何が問題になっているのでしょうか。
フラグメントの上部で次のようにインスタンス化します。
final public static Handler handler = new Handler();
boolean isRunning = false;
次に、AsyncTaskのonPostExecute部分に、次のコードがあります。
@Override
protected void onPostExecute(Void v) {
if(!isRunning) {
Runnable runnable = new Runnable() {
@Override
public void run() {
anImageView.setVisibility(View.VISIBLE);
isRunning = true;
counter++;
//imageDownloader.download(data.get(i).getImageURL(), anmageView);
if(TabsViewPagerFragmentActivity.theImages !=null && TabsViewPagerFragmentActivity.theImages.size() > 0){
Bitmap anImage = TabsViewPagerFragmentActivity.theImages.get(i);
anImageView.setImageBitmap(anImage);
}
i++;
if(i>TabsViewPagerFragmentActivity.theImages.size()-1)
{
i=0;
}
handler.postDelayed(this, 1500);
}
};
handler.postDelayed(runnable, 0);
}
}
上記のAsyncTaskは、onCreate()メソッド内で呼び出されます。次に、定期的に変更される最新の画像を取得するために、これらの画像を再ダウンロードする更新ボタンがあります。したがって、更新ボタンにonClick()イベントが付加されています。これも正常に機能しますが、次のコードが呼び出されます。
@Override
protected void onPostExecute(Void v) {
for(int i=0;i<data.size()-1;i++) {
Bitmap anImage = getBitmapFromURL(data.get(i).getImageURL());
theImagesRefreshed.add(anImage);
}
if(!isRunning) {
Runnable runnable = new Runnable() {
@Override
public void run() {
anImageView.setVisibility(View.VISIBLE);
isRunning = true;
counter++;
//imageDownloader.download(data.get(i).getImageURL(), anImageView);
if(theImagesRefreshed !=null && theImagesRefreshed.size() > 0){
Bitmap anImage = theImagesRefreshed.get(i);
anImageView.setImageBitmap(anImage);
}
i++;
if(i>theImagesRefreshed.size()-1)
{
i=0;
}
handler.postDelayed(this, 1500);
}
};
handler.postDelayed(runnable, 0);
}
}
ハンドラーが正しくセットアップされておらず、パフォーマンスの問題を引き起こしていると思います。誰かがこのコードに何か問題があるのを見ることができますか?
前もって感謝します!