【问题标题】:Threading Problem with Java and AndroidJava和Android的线程问题
【发布时间】:2010-11-17 15:36:29
【问题描述】:

我正在设计一个应用程序,它可以浏览一系列图片,就像浏览相册一样。很标准的东西我敢肯定。 由于图片必须先查看几秒钟才能自动更改为下一张图片,所以我决定创建一个显示图片的线程,等待几秒钟然后继续。

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 说我无法触摸不是在此线程中创建的视图层次结构上的视图。我不确定这意味着什么,所以我做了

image.post(...)

代码。哪个有效。我的主要问题是:为什么这是必要的?如果你看我上面的代码,第一个 showPicture() 方法不在 image.post() 代码中。但没有注册例外。没看懂,为什么不需要发帖?而且为什么我需要发布,因为 Image 是一个类变量,我认为可以被所有线程查看。我很高兴它成功了,但很困惑。

请记住,这是我第一次尝试在 Java 中进行线程化,而不是简单的教科书示例。所以我还是很困惑。

顺便说一句,最后我放弃了整个线程,只是做了

new Thread(new Runnable() {
            public void run() {...}

【问题讨论】:

    标签: java android multithreading runnable


    【解决方案1】:

    在使用 GUI 做“事情”时,您应该始终在 GUI 线程上。这就是 View.post(Runnable) 所做的,确保 gui 线程完成可运行对象的工作。

    即使您的 showImage 工作一次并不意味着它总是有效...

    【讨论】:

    • 感谢您的回答。好的,但是为什么 showPicture 在没有 post() 的情况下工作一次?另外,我不应该为 GUI 应用程序定义内部类线程吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2011-09-19
    • 2011-01-17
    相关资源
    最近更新 更多