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);
}
};
}
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
- android开发-Handler处理
- [Android开发] Android Handler的处理方式
- Android开发之多线程处理、Handler详解
- Android开发之多线程处理、Handler详解
- Android开发之多线程处理、Handler详解
- Android开发之多线程处理、Handler详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- Android 开发之多线程处理、Handler 详解
- 玩命牛的成长记录(五)——表单
- 对图像数据进行预处理时遇到的若干问题(2)
- java基础——HttpServletResponse和HttpServletRequest
- android View的绘制流程
- ++i和i++效率谁高
- android开发-Handler处理
- ubuntu eclipse下ffmpeg配置
- 字符串逆序输出
- 《Unix编程艺术》
- UITableView
- MySQL终端的常用命令
- Python学习之路14——列表
- android开发 - AsyncTask
- innodb锁级别分析(一)