从另一个线程处理UI线程中的TextView不会引发异常

时间:2014-03-08 13:22:34

标签: android multithreading

我正在制作概念证明示例,我尝试了下面的代码。我应该看到在不同的Thread中处理UI元素的例外,但代码没有问题!:

public class MainActivity extends Activity {

    TextView tv1 ;

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

        tv1 = (TextView) findViewById(R.id.txt1);

        new Thread(new Runnable() {

            @Override
            public void run() {

                tv1.setText("I'm inside differnt thread");
            }
        }).start();

    // This also works !    
//  TestingThread t = new TestingThread();
//  t.start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    class TestingThread extends Thread{
        @Override
        public void run() {
            super.run();

            //simulate download
            for (int i = 0; i < 1000000; i++) {

            }

            tv1.setText("I'm inside differnt thread");

        }
    }
}

1 个答案:

答案 0 :(得分:0)

我找到了问题。

线程花费的时间非常少,而且它在onCreate()方法中。它甚至在UI出现在屏幕上之前就完成了。如果我将此代码移动到onResume()(在UI变为可见之后)或者通过一些sleep()调用需要很长时间,它会按预期崩溃。