Handlerの使用解析
6653 ワード
HandlerにはPostとsendMessageの2つの使い方があります.
义齿 post(Runnable r):一般的なpost方式. postAtTime(Runnable r,long uptimeMillis):ある絶対時間に を実行するように設定 postAtTime(Runnable r, Object token, long uptimeMillis) postDelayed(Runnable r,long delayMillis):実行遅延時間を設定して を実行
Handlerを決める
サブスレッドを作成:
sendMessage方式
まずHandlerでMessageを処理します. sendMessage(Message msg): sendMessageDelayed(Message msg, long delayMillis): sendMessageAtTime(Message msg, long uptimeMillis) : sendEmptyMessage(int what) sendEmptyMessageDelayed(int what, long delayMillis) sendEmptyMessageAtTime(int what, long uptimeMillis) : private Handler mHandler = new Handler(){
サブスレッドの作成
HandlerにはCallback付きの構造関数もあります.
义齿
Handlerを決める
private Handler mPostHandler = new Handler();
サブスレッドを作成:
private class TestThread extends Thread{
@Override
public void run() {
try {
Thread.sleep(5000);
/**
* Post Runnable .
* :
* post(Runnable)
* postAtTime(Runnable,long)
* postDelayed(Runnable,long)
*
* Handler Post , Runnable , Runnable , run() 。 run() UI 。
*/
mPostHandler.post(new Runnable() {
@Override
public void run() {
text.setText("Handler Post ");
LogHelper.i("Handler Post ");
}
});
/**
* postAtTime: 。
*/
mPostHandler.postAtTime(new Runnable() {
@Override
public void run() {
text.setText(text.getText().toString()+"
Handler postAtTime ");
LogHelper.i("Handler postAtTime ");
}
}, SystemClock.uptimeMillis() + 5000);
/**
* postDelayed: .
*/
mPostHandler.postDelayed(new Runnable() {
@Override
public void run() {
text.setText(text.getText().toString()+"
Handler postDelayed ");
LogHelper.i("Handler postDelayed ");
}
},1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
sendMessage方式
まずHandlerでMessageを処理します.
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MSG_ONE:
String obj = (String)msg.obj;
LogHelper.i("
obj is : " + obj);
text.setText(text.getText().toString()+"obj is : " + obj);
int arg1 = msg.arg1;
int arg2 = msg.arg2;
LogHelper.i("
arg1 is : " + arg1 + " arg2 is : " + arg2);
text.setText(text.getText().toString()+"arg1 is : " + arg1 + " arg2 is : " + arg2);
if(msg.getData() != null){
String test = (String)msg.getData().get("test");
LogHelper.i("
test is : " + test);
text.setText(text.getText().toString()+"test is : " + test);
}
break;
case MSG_TWO:
LogHelper.i("receive MSG_TWO ");
break;
}
}
}; サブスレッドの作成
private class TestMessageThread extends Thread {
@Override
public void run() {
try {
Thread.sleep(5000);
/**
* 3 Message:
*
* 1、Message message = new Message();
* 2、Message message = Message.obtain();
* 3、Message message = mHandler.obtainMessage();
*
*/
Message message = Message.obtain();
/**
* what Message , Handler handleMessage what Message,
*/
message.what = MSG_ONE;
/**
* arg1 arg2 Message
*/
message.arg1 = 100;
message.arg2 = 101;
/**
* obj Object Message
*/
message.obj = new String("Obj String");
/**
* setData getData Message Bundle
*/
Bundle bundle = new Bundle();
bundle.putString("test","test string");
message.setData(bundle);
mCallHandler.sendMessage(message);
/**
* 。
*/
mCallHandler.sendEmptyMessage(MSG_TWO);
/**
* 。
*/
mHandler.sendMessageAtTime(message,SystemClock.uptimeMillis() + 5000);
/**
*
*/
mHandler.sendMessageDelayed(message,1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
HandlerにはCallback付きの構造関数もあります.
/**
* Callback true, , false, handleMessage, .
*/
private Handler mCallHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if(msg.what == MSG_TWO){
LogHelper.i("Callback MSG_TWO ");
return true;
}
return false;
}
}){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MSG_ONE:
String obj = (String)msg.obj;
LogHelper.i("
obj is : " + obj);
text.setText(text.getText().toString()+"obj is : " + obj);
int arg1 = msg.arg1;
int arg2 = msg.arg2;
LogHelper.i("
arg1 is : " + arg1 + " arg2 is : " + arg2);
text.setText(text.getText().toString()+"arg1 is : " + arg1 + " arg2 is : " + arg2);
if(msg.getData() != null){
String test = (String)msg.getData().get("test");
LogHelper.i("
test is : " + test);
text.setText(text.getText().toString()+"test is : " + test);
}
break;
case MSG_TWO:
LogHelper.i("receive MSG_TWO ");
break;
}
}
};