2014-12-05 87 views
2

我创建了正在运行的应用程序,并试图在用户按下开始按钮时创建塞子。 但是当我使用线程的应用程序返回黑屏 ,这是我的onCreate方法我附加螺纹尝试在我的应用程序中创建塞子

Thread t = new Thread() { 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        SetTextOnView(); 

       } 
      }); 
     } 
    }; 
     t.start(); 

的SetTextOnView方法包含

public void SetTextOnView() 
{ 
    TextView timedisp = (TextView) findViewById(R.id.stopperdisplay); 
    while(true) 
    { 
    timedisp.setText(String.valueOf(total)); 
    } 



} 

当我加入而statment 为什么这个问题开始就是它?

+0

你做一个无限循环使用一些工作在主(= UI)线程中。因此,应用程序开始不响应,然后显示一个黑屏 – Jivy 2014-12-05 15:31:30

+0

因此,如果我想创建限制用户的行走时间,当他按下开始按钮时,我怎么能没有时间呢? – boazDotnet 2014-12-05 15:36:36

+0

你需要的时间,但不是在主线程,你需要在每个setText之间添加一些延迟。 – Jivy 2014-12-05 15:44:35

回答

1

执行循环在你的线程不会阻塞UI线程+添加一些延迟,不会阻塞UI线程:

Thread t = new Thread() { 
    public void run() { 
     while (true) { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        SetTextOnView(); 
       } 
      }); 
      Thread.sleep(1000); 
     } 
    } 
}; 

而且你SetTextOnView:

public void SetTextOnView() 
{ 
    TextView timedisp = (TextView) findViewById(R.id.stopperdisplay); 
    timedisp.setText(String.valueOf(total)); 
} 
+0

感谢工作完美! :)我didnt知道,我需要在线程内设置延迟,所以为了我自己的理解,当我创建线程我需要添加共振延迟,我不想让那个线程打扰主线程(我是它的线程运行oncreate方法,所以..)是吗? – boazDotnet 2014-12-05 16:06:13

+0

是的,主线程(= Android中的UI线程)是管理活动的生命周期,显示器,接口等的人......你需要尽可能释放这个线程以获得反应式应用程序。所以,循环和延迟在这里每秒只执行setText一次,以尽量减少对应用程序的影响。 – Jivy 2014-12-05 16:22:23

相关问题