问题描述
|
正如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。这就是为什么您在“可运行的”文本之前看到“活动”文本的原因:当前线程不能仅仅停止其工作并选择“可运行的”。