android提供了handler来处理UI更新的问题
handler有2种处理方式
1.跟主线程在同以线程,可以实现UI更新,但是操作不当也会有ANR问题
2.跟主线程不在同一个线程,新起一个线程。在新的线程中耗时的操作不会有ANR问题
具体代码如下:
package com.stmars.handler;
import com.studymar.radiocheckbox.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class TestHandler extends Activity {
// 1.声明控件变量
ProgressBar downBar = null;
Button sureButton = null;
Button cancleButton = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.progressxml);
// 2.获取控件对象
initElem();
// 3.设置button监听
//setlistener();
testnewthread();
Log.i("123", "main thread id=" + Thread.currentThread().getId());
}
private void testnewthread() {
HandlerThread prHandlerThread = new HandlerThread("handlerthread") {
// 新的线程,耗时操作可以放在里面
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
}
};
prHandlerThread.start();
Handler qqHandler = new Handler(prHandlerThread.getLooper()) {
int i = 0;
public void handleMessage(Message msg) {
Log.i("123", "handler thread id="
+ Thread.currentThread().getId());
if (i <= 100)
downBar.setProgress(i);
else {
i = 0;
}
i = i + 10;
// progressHandler.sendMessage(msg);
this.sendEmptyMessage(0);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
};
Message msg = qqHandler.obtainMessage();
msg.sendToTarget();
}
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper mylooper) {
super(mylooper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
}
Handler progressHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
progressHandler.post(r);
}
};
Runnable r = new Runnable() {
int i = 0;
@Override
public void run() {
// Message msg=progressHandler.obtainMessage();
if (i <= 100)
downBar.setProgress(i);
else {
i = 0;
}
i = i + 10;
// progressHandler.sendMessage(msg);
progressHandler.sendEmptyMessage(0);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
private void setlistener() {
sureButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 4.进度条开始前进
progressHandler.post(r);
}
});
cancleButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 5.进度条结束
progressHandler.removeCallbacks(r);
}
});
}
private void initElem() {
downBar = (ProgressBar) findViewById(R.id.download);
sureButton = (Button) findViewById(R.id.sure);
cancleButton = (Button) findViewById(R.id.cancle);
downBar.setMax(100);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
}