无法挂起线程来访问Android中的UI

时间:2017-07-16 18:12:58

标签: java android multithreading

我正在编写一个线程,当它开始执行10秒后,它将显示UI的一个组件:

代码如下:

 Thread buttonThread=null; // this is a global variable
 [...]

 buttonThread = new Thread() 
 {

                    @Override
                    public void run() 
                    {
                        try 
                        {
                            super.run();
                            sleep(10000);  //Delay of 10 seconds
                        } catch (Exception e) 
                        {

                        }
                        finally 
                        {
                           try 
                           {
                                  buttonThread.suspend();
                                  cont.setVisibility(View.VISIBLE);
                                  buttonThread.destroy();
                            } 
                            catch (Exception e) 
                            {
                                  e.printStackTrace();
                            }

                        }
                   }
 };
 buttonThread.start();

但是当我尝试执行buttonThread.suspend()时,我得到了一个java.lang.UnsupportedOperation异常。

我知道使用suspend是不安全的,这就是它被弃用的原因,但是我想首先检查挂起线程是否正常工作,并通过调用.suspend()看起来是最简单的方法。

请问您能给我一些可能的解决方案,以便代码中显示的线程暂停吗?

2 个答案:

答案 0 :(得分:2)

  

我正在编写一个线程,当它开始执行10秒后,它将显示UI的一个组件:

线程在这里过度杀伤,并且使用它不合理。使用普通Runnable并以所需的延迟(postDelayed())发布 - 这对您的任务来说已经足够了。

答案 1 :(得分:1)

在android中有很多方法可以做这样的事情。最常见的是,使用像这样的Handler类。

添加此导入行。

import android.os.Handler;

并使用此代码使用处理程序类创建新的runnable。

new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                 // do your stuff here
                }
            }, DELAY_IN_MILLI_SECONDS);