android.os.Handler的post方法在其附加的Thread中调用,但是有一些奇怪的现象!

问题描述

| 正如API所说,post()方法应该在它所连接的线程中调用,但是发生了一些我无法解释的奇怪事情! 代码是:
public class ProgressBaractivity extends Activity {
private final static String TAG = \"ProgressBaractivity\";

private Runnable test = new Runnable(){
    @Override
    public void run() {
        try {
            Thread.sleep(10000);
            Log.i(TAG,\"Thread---->\"+Thread.currentThread().getId());
            Log.i(TAG,\"Thread---->\"+Thread.currentThread().getName());
        } catch (InterruptedException e) {}
    }
};
private Handler handler = new Handler(){
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    handler.post(test);
    this.setContentView(R.layout.progress_bar_layout);
    Log.i(TAG,\"Activity--->\"+Thread.currentThread().getId());
    Log.i(TAG,\"Activity--->\"+Thread.currentThread().getName());
}   
} 当我使用eclipse将应用程序安装到模拟器时,发生的事情是:首先打印onCreate()方法中的文本!10秒钟后,将打印run()方法中的文本!结果如下:有人知道为什么吗?   06-04 14:13:09.964:INFO / ProgressBaractivity(366):活动---> 1      06-04 14:13:09.964:INFO / ProgressBaractivity(366):活动->主      06-04 14:13:20.070:INFO / ProgressBaractivity(366):线程----> 1      06-04 14:13:20.070:INFO / ProgressBaractivity(366):线程---->主     

解决方法

        您有错:这里的文档这样说:
Causes the Runnable r to be added to the message queue. The runnable will be run on the thread to which this handler is attached. 
这意味着Runnable将在Activity的主线程上运行,但将在该线程完成其当前工作之后排队并运行。当前的工作正在完成
onCreate
,因此在
onCreate
完成后,线程现在是空闲的并将处理Runnable。这就是为什么您在“可运行的”文本之前看到“活动”文本的原因:当前线程不能仅仅停止其工作并选择“可运行的”。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...