package cn.com.chenzheng_java;
import android.os.AsyncTask;
/**
*
* @author chenzheng_java
* @description 异步任务AcyncTask示例
*
*/
public class MyAsyncTask extends AsyncTask<String, Integer, Object> {
/**
* 该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。
* 很多时候,我们会在这里显示一个进度条啥的,以示后台正在
* 执行某项功能。
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* 该方法由后台进程进行调用,进行主要的耗时的那些计算。
* 该方法在onPreExecute方法之后进行调用。当然在执行过程中
* 我们可以每隔多少秒就调用一次publishProgress方法,更新
* 进度信息
*/
@Override
protected Object doInBackground(String... params) {
return null;
}
/**
* doInBackground中调用了publishProgress之后,ui线程就会
* 调用该方法。你可以在这里动态的改变进度条的进度,让用户知道
* 当前的进度。
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
/**
* 当doInBackground执行完毕之后,由ui线程调用。可以在这里
* 返回我们计算的最终结果给用户。
*/
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
}
}
public class MainActivity extends Activity implements OnClickListener {
private Button btnTXT;
private TextView tvTXT;
private StringBuffer returnMsg;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnTXT = (Button)findViewById(R.id.btnTXT);
tvTXT = (TextView)findViewById(R.id.tvTXT);
btnTXT.setOnClickListener(this);
}
@Override
public void onClick(View v) {
returnMsg = new StringBuffer();
// 创建一个包含Looper的线程,这里如果没有HandlerThread的调用,会直接将后边的MyRunnable放到UI线程队列(myHandler.post(new MyRunnable()))
HandlerThread handlerThread = new HandlerThread("handler_thread");
handlerThread.start(); // 启动自定义处理线程
myHandler = new MyHandler(handlerThread.getLooper()); // 将handler绑定到新线程
myHandler.post(new MyRunnable()); // 在新线程中执行任务
}
/** 主线程Handler,可以与UI控件交互 */
Handler mainHanlder = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 0) {
tvTXT.setText(returnMsg.toString()); // 与主线程控件打交道(直接访问)
}
}
};
/** 构造Hanlder,不可与UI控件直接交互 */
private MyHandler myHandler = null;
private class MyHandler extends Handler{
/**
* 使用默认的构造函数,会将handler绑定当前UI线程的looper。
* 如果想使用多线程这里是不能使用默认的构造方法的。
*/
public MyHandler(){
super();
}
/** 构造函数,自定义looper */
public MyHandler(Looper looper) {
super(looper);
}
// 处理具体的message消息,继承自父类的方法
@Override
public void handleMessage(Message msg) {
int what = msg.what;
Bundle bundle = (Bundle)msg.obj; // 提取bundle中的信息
String name = bundle.getString("name");
String sex = bundle.getString("sex");
boolean marry = bundle.getBoolean("marray");
int age = bundle.getInt("age");
StringBuffer strBuf = new StringBuffer(); // 拼接bundle信息
strBuf.append("what = ").append(what).append("\n\n");
strBuf.append("name = ").append(name).append("\n");
strBuf.append("sex = ").append(sex).append("\n");
strBuf.append("marry = ").append(marry).append("\n");
strBuf.append("age = ").append(age).append("\n\n");
strBuf.append("http://blog.csdn.net/sunboy_2050");
returnMsg = returnMsg.append(strBuf); // 保存要显示的结果
mainHanlder.sendEmptyMessage(0); // 向主线程mainHanlder发送消息,与UI控件交互显示结果
super.handleMessage(msg);
}
}
// 构造Runnable,处理后台业务逻辑,如下载
private class MyRunnable implements Runnable{
@Override
public void run() {
try {
Message msg = Message.obtain(myHandler); // 捕获myHandler消息
msg.what = 10;
Bundle bundle = new Bundle(); // 封装bundle信息
bundle.putString("name", "yanggang");
bundle.putString("sex", "pure boy");
bundle.putBoolean("marry", false);
bundle.putInt("age", 18);
msg.obj = bundle;
long thID = Thread.currentThread().getId();
returnMsg.append(thID).append(" : send msg start...").append("\n");
msg.sendToTarget(); // 向myHandler发送消息
Thread.sleep(3000);
} catch (Exception e) {
Log.i("", "Runnable send msg error...");
e.printStackTrace();
}
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有