android开发-Handler处理

来源:互联网 发布:针织开衫淘宝 编辑:程序博客网 时间:2024/06/06 03:56
Handler在android里负责发送和处理消息。它的主要 用途有:


1. 按计划发送消息或执行某个Runnable(使用POST方法)


2.  从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)‘


一般我们需要联网读取数据,耗时的操作,在UI线程不能超过六秒,


如果有长时间操作的数据,那么就必须放到子线程操作








public class MainActivity extends Activity implements View.OnClickListener {
private Button btn1,btn2,btn3;
private ProgressBar p1,p2,p3;
private TextView tView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        p1 = (ProgressBar) this.findViewById(R.id.pb1);
        p2 = (ProgressBar) this.findViewById(R.id.pb2);
        p3 = (ProgressBar) this.findViewById(R.id.pb3);
        
        btn1 = (Button) this.findViewById(R.id.button1);
        btn2 = (Button) this.findViewById(R.id.button2);
        btn3 = (Button) this.findViewById(R.id.button3);
        
        tView = (TextView) this.findViewById(R.id.textview1);
        
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
    }


 
    @SuppressLint("HandlerLeak") private Handler handler = new Handler(){
    public void handleMessage(android.os.Message msg){
    if(msg.what == 1){
    tView.setText("Click!");
   
    if(p1.getProgress() != 100){
    p1.setProgress(p1.getProgress() + 10);
    sendEmptyMessageDelayed(1, 1000);//发送一个空的消息
    }
    }else if(msg.what == 2){
    if(p2.getProgress() != 100){
    p2.setProgress(msg.arg1);
    }else{
    p2.setProgress(0);
    }
Message msg2 = obtainMessage(); 
msg2.arg1 = p2.getProgress() + 10;
msg2.what = 2;
handler.sendMessageDelayed(msg2, 1000);
    }
    }
    };


@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.button1:
new Thread(new Runnable(){ 
@Override
public void run(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) { 
e.printStackTrace();
}
handler.sendEmptyMessage(1);
}
}).start();
break;
case R.id.button2:
Message msgMessage = handler.obtainMessage();
msgMessage.what = 2;
msgMessage.arg1 = p2.getProgress();
handler.sendMessage(msgMessage);
break;
case R.id.button3: 
handler.post(runa);
break;
}

}

Runnable runa = new Runnable(){ 
@Override
public void run() { 
if(p3.getProgress() == 100){
return ;
}
p3.setProgress(p3.getProgress() + 10);
handler.postDelayed(runa, 1000);

}; 
}

















0 0
原创粉丝点击