Java Android SDK:处理程序导致某些设备崩溃

Java Android SDK:处理程序导致某些设备崩溃,java,android,android-asynctask,handler,Java,Android,Android Asynctask,Handler,我有一个处理程序,用于在指定的间隔循环中显示图像,当到达最后一个图像时,它返回到正确的第一个图像。然而,我有问题,因为它导致一些设备崩溃,并使CPU的使用率大幅上升,我只是想知道什么是错误的代码 我在片段顶部对其进行了如下实例化: final public static Handler handler = new Handler(); boolean isRunning = false; 然后在AsyncTask的onPostExecute部分,我有以下代码: @Override

我有一个处理程序,用于在指定的间隔循环中显示图像,当到达最后一个图像时,它返回到正确的第一个图像。然而,我有问题,因为它导致一些设备崩溃,并使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);


         }


     }
@覆盖
受保护的void onPostExecute(void v){
对于(int i=0;i 0){
位图anImage=图像刷新。获取(i);
设置图像位图(anImage);
}
i++;
如果(i>图像刷新.size()-1)
{
i=0;
}
handler.postDelayed(这是1500);
}
};
handler.postDelayed(可运行,0);
}
}
我认为处理程序的设置不正确,导致了性能问题。有人看到这个代码有什么问题吗


提前谢谢

在线程中使用处理程序时,您需要调用Looper.prepare()。因此,在创建Runnable的实例后编写Looper.prepare(),该实例似乎无法正常运行。不幸的是,android操作系统在离开应用程序后会杀死该应用程序。您可以放置崩溃日志吗??