Java Android SDK:处理程序导致某些设备崩溃
我有一个处理程序,用于在指定的间隔循环中显示图像,当到达最后一个图像时,它返回到正确的第一个图像。然而,我有问题,因为它导致一些设备崩溃,并使CPU的使用率大幅上升,我只是想知道什么是错误的代码 我在片段顶部对其进行了如下实例化: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
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操作系统在离开应用程序后会杀死该应用程序。您可以放置崩溃日志吗??