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

来源:互联网 发布:大数据在电商中的应用 编辑:程序博客网 时间:2024/04/30 22:04

一直没怎么使用过 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

0 0
原创粉丝点击