我的代码主要解码一系列位图对象,以便稍后在ImageView中显示。要更好地控制显示每个图像的持续时间。所以我在Runnable中实现了代码。这是可运行的片段。
final File file[]=dir.listFiles();
iv.postDelayed(
new Runnable() {
@Override
public void run() {
i++;
Bitmap bitmap = decodeFile(file[i]);
iv.setImageBitmap(bitmap);
iv.postDelayed(this, 5000);
}
}, 5000);
但是,我似乎没有很好地控制循环。我无法使用for循环,因为在这种情况下“i”不能指定为零。只要“file [i]”具有File引用,此代码就可以工作。一旦它显示所有图像一次,应用程序只需强制关闭do到arrayindexoutofbounds异常。我只想无限地继续循环。有什么指针吗?
这里decodeFile()调用另一个函数来重新调整位图的大小。
答案 0 :(得分:0)
我不确定你在做什么,但为什么不使用while循环呢?像while (true) { }
之类的东西会导致无限循环。
答案 1 :(得分:0)
感觉你想要做一些可能需要一段时间的工作并且你想要重复它,尝试查看一个名为service的android组件并按意图发送它。
http://developer.android.com/guide/topics/fundamentals/services.html
可能是一个IntentService很好,并且帮助很多
http://developer.android.com/reference/android/app/IntentService.html
答案 2 :(得分:0)
我建议使用AsyncTask
文件意味着文件数组被赋予要在后台处理的任务。
位图意味着你用你的位图调用publishProgress,你可以在onProgressUpdate的UI线程上获取它
虚空意味着一旦完成就会停止。
这里的好处是解码是在后台线程上完成的,但仍然在UI线程上调用iv.setBitmap,这是强制性的。
答案 3 :(得分:0)
一旦到达终点,只需重置为零:
final File file[]=dir.listFiles();
iv.postDelayed(
new Runnable() {
@Override
public void run() {
if (i == file.length) {
i = 0;
}
else {
i++;
}
Bitmap bitmap = decodeFile(file[i]);
iv.setImageBitmap(bitmap);
iv.postDelayed(this, 5000);
}
}, 5000);