我正在设计一款应用程序,可以轻松浏览一系列图片,例如点击相册。非常标准的东西,我敢肯定。 由于在自动更改下一张照片之前必须查看图片几秒钟,我决定使用显示图片的线程,等待几秒然后继续。
Picthread(ImageView Image1) {
this.image = Image1;
}
public void run(){
showPicture(image);
animal_array = new String[7];
while (counter < 7){
try{
int timer = 0;
while (timer < 2000){
sleep(500);
timer+=500;
}
image.post(new Runnable(){
public void run() {
showPicture(image);
}
});
}
catch (InterruptedException e) {
}
}
}
这实际上有效。 showPictures是一个非常简单的方法,它只选择一张图片并将其放在ImageView上。没有必要为我的问题了解它。 一开始它没有用,logcat说我无法触摸在这个线程中没有创建的视图heirarchy的视图。我不确定这是什么意思所以我做了
image.post(...)
代码。哪个有效。我的主要问题是:为什么这是必要的?如果查看上面的代码,第一个showPicture()方法不在image.post()代码中。但没有注册任何例外。我不明白这一点,为什么不需要一个帖子?但是为什么我需要发布,因为Image是一个类变量,我认为可以被所有线程查看。我很高兴它有效,但很困惑。
请记住,这是我第一次尝试使用Java进行线程处理而不是简单的教科书示例。所以我还是很困惑。
顺便说一句,最后我抛弃了整个线程,然后就完成了
new Thread(new Runnable() {
public void run() {...}
答案 0 :(得分:1)
使用GUI执行“事情”时,您应始终使用GUI线程。这就是View.post(Runnable)
所做的,确保gui线程能够完成runnable的工作。
即使您的showImage
有效,但并不意味着它始终有效......