代码如下:
public static long zero;
void test(){
zero = System.currentTimeMillis();
Thread thread = new Thread(){
@Override
public void run() {
super.run();
Log.e(TAG, "subthread before sleep" + (System.currentTimeMillis() - zero));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.e(TAG, "subthread after sleep" + (System.currentTimeMillis() - zero));
handler.sendMessage(Message.obtain());
Log.e(TAG, "subthread after sendMessage" + (System.currentTimeMillis() - zero));
}
};
thread.start();
Log.e(TAG, "mainthread before sleep" + (System.currentTimeMillis() - zero));
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.e(TAG, "mainthread after sleep" + (System.currentTimeMillis() - zero));
}
MyHandler handler = new MyHandler(this);
private static class MyHandler extends Handler {
private WeakReference<MainActivity> activityWeakReference;
public MyHandler(MainActivity activity) {
activityWeakReference = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
MainActivity activity = activityWeakReference.get();
if (activity != null) {
//处理handler消息,本次用不到
Log.e(TAG, "main handler handleMessage" + (System.currentTimeMillis() - zero));
}
}
}
放在oncreate中执行 打印如下
MainActivity: mainthread before sleep1
MainActivity: subthread before sleep1
MainActivity: subthread after sleep1003
MainActivity: subthread after sendMessage1004
MainActivity: mainthread after sleep2504
MainActivity: main handler handleMessage2582
要么就是主线程也通过messagequeue来运行,要么就是观察主线程idle状态