更改TextView文本后,Android App停止

时间:2015-11-06 13:47:41

标签: android textview settext thread-sleep

我制作了一款Android应用,它有两个 TextView 。当我使用setText()更改文本时,应用程序停止。 我已经在 StackOverflow 上阅读了其他答案,并在我的程序中实现了它们,但问题仍然存在。

这是我的onCreate()代码:

TextView ec, vc;
Thread t;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ec = (TextView) findViewById(R.id.ce);
    vc = (TextView) findViewById(R.id.cv);
    t = new Thread(new Runnable() {@Override public void run() {loop();}});
    t.start();
}

这是我的loop()代码:

public void loop()
{
    try{Thread.sleep(7000);}catch(Exception e){}
    ec.setText("");
    vc.setText("");
    try{Thread.sleep(53000);}catch(Exception e){}
    t.stop();
}

我想在7秒后清空TextView的文本。 但是当我运行我的应用程序时,在7秒后,它会停止。

StackOverflow 上的其他答案说我应该在发起setContentView(R.layout.activity_main);ec变量之前添加vc。它已经存在,但应用仍停止。

请帮帮我。

3 个答案:

答案 0 :(得分:1)

您可以使用View.postDelayed方法在一段时间后在UIThread上运行Runnable

答案 1 :(得分:0)

UI元素只能从UI(主)线程更改,因此它会崩溃。尝试使用:

activity.runOnUiThread(new Runnable() {
            public void run() {
            //Do something on UiThread
        }
    });

但是你会让UI线程睡眠,这意味着它会以任何方式冻结。所以,不好的做法。

答案 2 :(得分:0)

试试

public void loop() 
{ 
    try{Thread.sleep(7000);}catch(Exception e){}
    activity.runOnUiThread(new Runnable() {
        public void run() { 
           ec.setText(""); 
           vc.setText("");  
        } 
    }); 

    try{Thread.sleep(53000);}catch(Exception e){}
    t.stop(); 
}