难以使用Activity实现Runnable接口

时间:2013-09-29 18:29:55

标签: android multithreading

我一直在尝试在我的应用程序中实现Runnable,所以我开始使用一些简单的过程,但即使这样也不会在TextView上显示任何内容。令人惊讶的是,我已经覆盖了对象的run(),但它仍然没有显示。

package com.example.filer;
public class Filesearcher extends Activity implements Runnable {

TextView tvtis;
Thread tr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_filesearcher);
    tvtis = (TextView) findViewById(R.id.tvfirst);
    tr = new Thread();
    tr.start();
}

@Override
public void run() {
    // TODO Auto-generated method stub
    try {
        Thread.sleep(5000);
        tvtis.setText("Started");
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

3 个答案:

答案 0 :(得分:1)

更改

tr = new Thread();

tr = new Thread(this);

答案 1 :(得分:0)

您无法从UI线程以外的线程更改UI。意味着 - 您的线程可能正常工作,但tvis.setText()没有(从该线程内)。尝试使用简单的Log.d("tag", "does it work?")来查看您的线程是否运行。

答案 2 :(得分:0)

将Runnable放在一个帖子上:tr = new Thread(this);

从另一个切换到UI线程:

@Override
public void run() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
                tvtis.setText("started");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

查看runOnUiThread(Runnable)

documentation