Android中混乱的多线程



这是我的代码:

public class MainActivity extends Activity {
    private TextView view;
    private Handler handler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = (TextView) findViewById(R.id.view);
        view.setText("how are you");
        handler.post(r);
        System.out.println("oncreate");
    }
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        System.out.println("onstart");
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    Runnable r = new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
}

activity_main.xml中,我采用了LinearLayout,其中只有一个TextView。运行程序后,10秒后屏幕上将显示文本字符串"你好吗"。但是文本字符串"oncreate"one_answers"onstart"可以立即显示在logcat中。这怎么会发生?在我看来,所有的文本字符串都应该在运行程序后的10秒内显示出来。

简单的方法就是:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = (TextView) findViewById(R.id.view);
System.out.println("oncreate");
new Thread(new Runnable() {
        public void run() {
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
         }
}).start();
    view.setText("how are you");
}

这段代码将立即在logcat上打印"onstart"one_answers"oncreate",接下来10秒将在textview上设置文本。。。

最新更新