Android TextView 文本更改后应用程序停止

Android App stops after TextView text is changed

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

这是我的 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 秒后停止。

Whosebug 上的其他答案说我应该在启动 ecvc 变量之前放置 setContentView(R.layout.activity_main);。它已经存在,但应用程序仍然停止。

请帮帮我。

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

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

但是您会让 UI 线程休眠,这意味着它无论如何都会冻结。所以,不好的做法。

试试看

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(); 
} 

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