Handler
發(fā)送message:在工作線程給主線程發(fā)送消息
- sendMessage(Message message)
- sendEmptyMessage(int what)
處理Message:在主線程執(zhí)行時,方法會被回調(diào),建立通信基礎(chǔ)
- handleMessage(Message msg)
使用它來發(fā)送message和處理message
Message
工作線程與主線程的發(fā)送的消息
Message通過屬性what arg1 arg2傳遞整型數(shù)據(jù)
setData(Bundle bundle)加載對象型數(shù)據(jù)
Message.obtain(Handler hander)
當looper將消息取出交還給另外的handler
一、發(fā)送一個空的Message,傳遞一個輕量的數(shù)據(jù);使用what標識
1、繼承Handler,在Activity中寫一個內(nèi)部類,接收消息,在這里更新UI
class MyHandler2 extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(msg.what+" ");
}}
2 、定義MyHandler2對象,一般為Activity的成員變量
MyHandler2 handler2=new MyHandler2();
3、在工作線程中,使用MyHandler2給UI線程發(fā)送消息
使用sendEmptyMessage(),參數(shù)為int值,傳遞輕量參數(shù)
public void onClick(View view){
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
i++;
handler2.sendEmptyMessage(i);
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
效果圖
public class HandlerActivity_12_08 extends AppCompatActivity {
TextView textView;
MyHandler2 handler2=new MyHandler2();
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler_activity_12_08);
textView= (TextView) findViewById(R.id.tvHandler_08);
}
public void onClick(View view){
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
i++;
handler2.sendEmptyMessage(i);
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
class MyHandler2 extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(msg.what+" ");
}
}
}