1——子线程接收主线程消息
A—Handler消息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSent=(Button)findViewById(R.id.btnSent);
mTxt=(TextView)findViewById(R.id.txtResult);
// 主线程传子线程
final subThread st01=new subThread();
st01.start();
btnSent.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Message msg=Message.obtain();
msg.arg1=123;
st01.subHandler.sendMessage(msg);
num++;
}
});
}
private class subThread extends Thread{
Handler subHandler=null;
@Override
public void run() {
super.run();
//子线程消息队列
Looper.prepare();
subHandler =new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
//super.handleMessage(msg);
Toast.makeText(MainActivity.this,"子线程收到消息:"+msg.arg1,Toast.LENGTH_LONG).show();
}
};
Looper.loop(); //启动消息循环
}
}
2——子线程更新UI
A—Handler消息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTxt=(TextView)findViewById(R.id.txtResult);
//启动子线程
final subThread st01=new subThread();
st01.start();
mainHandler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
mTxt.setText("主线程GET="+msg.arg1);
Toast.makeText(MainActivity.this,"数据接收="+msg.arg1,Toast.LENGTH_LONG).show();
}
};
}
private class subThread extends Thread{
Handler subHandler=null;
@Override
public void run() {
super.run();
Looper.prepare();
Looper.loop(); //启动消息循环
Message msg=Message.obtain();
msg.arg1=777;
mainHandler.sendMessage(msg );
}
}
B—runOnUiThread
//MainActivity内声明
private String download() throws InterruptedException
{
Thread.sleep(1000);
return "这是结果数据";
}
//OnCreate内
btnSent.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//方法:runOnUiThread
((Activity)MainActivity.this).runOnUiThread(new Runnable() {
@Override
public void run() {
String data="";
try{
data=download();
}catch (InterruptedException e){
e.printStackTrace();
}
mTxt.setText(data); //UI显示
}
});
}
});