Java和Android的线程问题

时间:2010-11-17 15:36:29

标签: java android multithreading runnable

我正在设计一款应用程序,可以轻松浏览一系列图片,例如点击相册。非常标准的东西,我敢肯定。 由于在自动更改下一张照片之前必须查看图片几秒钟,我决定使用显示图片的线程,等待几秒然后继续。

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() {...}

1 个答案:

答案 0 :(得分:1)

使用GUI执行“事情”时,您应始终使用GUI线程。这就是View.post(Runnable)所做的,确保gui线程能够完成runnable的工作。

即使您的showImage有效,但并不意味着它始终有效......