当前位置: 代码迷 >> Android >> 从另一个线程处理UI线程中的TextView不会引发异常
  详细解决方案

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

热度:28   发布时间:2023-08-04 12:35:18.0

我正在制作概念验证示例,并尝试了以下代码。 我应该看到在不同线程内处理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");

        }
    }
}

我有点发现问题了。

该线程占用的时间非常少,它位于onCreate()方法内部。 它甚至在UI出现在屏幕上之前完成。 如果我将此代码移动到onResume() (在显示UI之后),或者通过某些sleep()调用花费了很长时间,则它会崩溃。

  相关解决方案