我有一个处理程序,用于在指定的间隔循环中显示图像,在到达最后一个图像时,它会返回到第一个正确的图像。但是,我遇到了问题,因为它导致某些设备崩溃并使 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);
}
}
我认为处理程序设置不正确并导致性能问题。任何人都可以看到这段代码有什么问题吗?
提前致谢!