Handler post()等在子线程中更新主线程的UI的方法使用小汇

一直没怎么使用过 handler.post()看到很多地方别人都用到,所以漏出两段代码来练练手





/**
 * 总结View.post(),handler.post()方法:有在子线程中更新主线程的UI需求就可以调用handler.post方法来更新
 * @author Administrator
 *
 */

public class MainActivity extends Activity {


    private Button bt;
private Button bt2;
private Button bt3;
/**
* 主线程的handler
*/
Handler handler=new Handler();
private View bg;
private Button bt4;
private Button bt5;
private Button btReset;


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setViews();
        
    }


private void setViews() {
bt= (Button) findViewById(R.id.bt);
bt2= (Button) findViewById(R.id.bt2);
bt3= (Button) findViewById(R.id.bt3);
bt4= (Button) findViewById(R.id.bt4);
bt5= (Button) findViewById(R.id.bt5);
btReset= (Button) findViewById(R.id.btReset);
bg=findViewById(R.id.bg);

bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
bt.post(new Runnable() {

@Override
public void run() {
Random random=new Random();
int num=random.nextInt(1000);
bt.setText(""+num);
}
});
}
});

bt2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
   new Thread(){
    public void run() {
    try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
    bt2.post(new Runnable() {

  @Override
public void run() {
Random random=new Random();
int num=random.nextInt(1000);
bt2.setText(""+num);

if (num%4==0) {
bg.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright));
}else if (num%4==1) {
bg.setBackgroundColor(getResources().getColor(android.R.color.holo_orange_light));
}else if (num%4==2) {
bg.setBackgroundColor(getResources().getColor(android.R.color.holo_green_dark));
}else if (num%4==3) {
bg.setBackgroundColor(getResources().getColor(android.R.color.holo_red_dark));
}
}
});
    };
   }.start();
}
});

bt3.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
new Thread(new Runnable() {

@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.post(new Runnable() {

@Override
public void run() {
Random random=new Random();
int num=random.nextInt(100000);
bt3.setText(""+num);

}
});
}
}).start();
}
});

bt4.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
bt.postDelayed(new Runnable() {

@Override
public void run() {
bt4.setText("2秒后");
}
}, 2000);
}
});

bt5.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
new Thread(){
public void run() {
try {
Thread.sleep(2000);

runOnUiThread(new Runnable() {

@Override
public void run() {
bt5.setText("已更新");
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}

};
}.start();
}
});


//重置所有按钮
btReset.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
bt.setText("等同setText()");
bt2.setText("等待2秒后更新UI");
bt3.setText("在子线程中使用Handler.post()更新UI");
bt4.setText("在子线程中使用View.post()更新UI");
bt5.setText("在子线程中使用runOnUiThread等待2秒后更新UI");
bg.setBackgroundColor(getResources().getColor(android.R.color.white));

}
});
}
}



   原来View.post()与Handler.post()更新UI如此之方便

   希望与更多的朋友一起交流android技术相互提高     交流 群:220282789     谢谢!

   源码下载    

   http://download.csdn.net/detail/u013042707/9186843

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值