Android HandlerThread、Looper、Handler知識ポイント整理
2722 ワード
続行...
テストdemoコード:
TestHandlerThreadActivity.java:
テストdemoコード:
TestHandlerThreadActivity.java:
package com.example.testandroid;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.HandlerThread;
import android.os.Message;
public class TestHandlerThreadActivity extends Activity {
HandlerThread handlerThread = new HandlerThread("test");
Handler handler;
Handler mMainHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("cur_id=" + Thread.currentThread().getId());
handlerThread.start();
System.out.println("handlerThread.id=" + handlerThread.getId());
// post(runnable), run(),run() ThreadId UIThread
// handler = new Handler();
// post(runnable), runnable handlerThread , UIThread
handler = new Handler(handlerThread.getLooper(), new Callback() {
@Override
public boolean handleMessage(Message msg) {
System.out
.println("receive Callback message.whatA=" + msg.what);
if (msg.what == 1) {
return true;//
} else if (msg.what == 3) {
System.out.println("handlerThread msg thread_id="
+ Thread.currentThread().getId());
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(1000);
System.out.printf(" %d
", i);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return true;
} else {
return false; // handleMessage()
}
}
}) {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println("receive message.whatB=" + msg.what);
}
};
handler.post(new Runnable() {
@Override
public void run() {
System.out.println("handler_post_cur_id="
+ Thread.currentThread().getId());
handler.sendEmptyMessage(1);
handler.sendEmptyMessage(2);
}
});
mMainHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println("mMainHandler msg thread_id="
+ Thread.currentThread().getId());
}
};
mMainHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("mMainHandle_post_cur_id="
+ Thread.currentThread().getId());
}
});
handler.sendEmptyMessage(3);
mMainHandler.sendEmptyMessage(1);
}
}