本文共 4719 字,大约阅读时间需要 15 分钟。
package com.hqyj.handler;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.ProgressBar;import android.widget.TextView;public class Android_22_HandlerActivity extends Activity implements Runnable{ TextView tv; ProgressBar pb;//定义进度条 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView) findViewById(R.id.textView1); pb = (ProgressBar) findViewById(R.id.progressBar1);//获取进度条的引用 //将耗时的操作放在子线程中 new Thread(this).start(); //计时器 new Thread(new TimeThread()).start(); } class TimeThread implements Runnable{ int count; @Override public void run() { // TODO Auto-generated method stub while(count < 100){ try { Thread.sleep(1000); count++; //向主线程发送消息 Message msg = new Message();// Bundle bundle = new Bundle();// bundle.putInt("count", count);// msg.setData(bundle); msg.arg1 = count; myHandler.sendMessage(msg); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Override public void run() { // TODO Auto-generated method stub try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //handler对象。负责在子线程中发消息。在主线程中接收并处理消息。实现子线程和主线程的通信。 Handler myHandler = new MyHandler(); class MyHandler extends Handler{ //主线程收到消息时,调用该方法,处理消息。 @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); int count = msg.arg1; tv.setText(String.valueOf(count)); pb.setProgress(count); } }}
package com.hqyj.asyctask;import android.os.AsyncTask;import android.widget.TextView;//Params 启动任务时的输入参数类型。注意:该参数只能填写引用数据类型,如果没有参数输入,填写Void//Progress 后台任务执行的进度的类型。//Result 后台计算结果的类型。public class MyAsyncTask extends AsyncTask{ TextView tv; int count; public MyAsyncTask(TextView tv) { // TODO Auto-generated constructor stub this.tv = tv; } //该方法被子线程调用 //将耗时的操作放在该方法中 @Override protected String doInBackground(Integer... params) { // TODO Auto-generated method stub while(count < params[0]){ //要求系统调用onProgressUpdate方法。 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } count++; this.publishProgress(count); } return "任务结束"; //返回的是result } //该方法被UI主线程调用 // @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); tv.setText(String.valueOf(values[0])); } //异步任务启动时调用 @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); tv.setText("任务开始"); } //异步任务结束时调用 @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); tv.setText(result); }}