Android子线程更新UI主线程方法之Handler
Android之多线程工作-AsyncTask与handler
详解Android中AsyncTask的使用
Android线程和Handler基础入门
Android中Handler的机制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="多线程demo。"/>
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal">
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="async Task实时更新进度条" android:id="@+id/btn_async_task"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消任务" android:id="@+id/btn_cancel_async_task"/>
</LinearLayout>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal">
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="执行handler任务2" android:id="@+id/btn_handler"/>
</LinearLayout>
<ProgressBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:progress="0" android:max="100" android:id="@+id/progress_bar_1" style="?android:attr/progressBarStyleHorizontal"/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tips_1"/>
</LinearLayout>
package com.example.MyStudyAndroid;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class ThreadDemo extends Activity {
private static final String TAG="thread demo";
private Button btn_async_task;
private ProgressBar progressBar_1;
private TextView tips_1;
private Button btn_cancel_async_task;
private Task1 myTask;
private Button btn_handler;
private Handler handler=new Handler();
//--耗时的操作。
Runnable longOperation=new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
tips_1.setText("开始执行任务2");
}
});
handler.postDelayed(new Runnable() {
@Override
public void run() {
tips_1.setText("这里已经任务2完成了。");
}
},5000);
}
};
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.thread_demo);
initUI();
initEvents();
}
private void initUI(){
btn_async_task=(Button)findViewById(R.id.btn_async_task);
progressBar_1=(ProgressBar)findViewById(R.id.progress_bar_1);
tips_1=(TextView)findViewById(R.id.tips_1);
btn_cancel_async_task=(Button)findViewById(R.id.btn_cancel_async_task);
btn_handler=(Button)findViewById(R.id.btn_handler);
}
private void initEvents(){
btn_async_task.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myTask=new Task1();
myTask.execute("");
}
});
btn_cancel_async_task.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(myTask!=null){
myTask.cancel(true);
}
}
});
btn_handler.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(longOperation).start();
}
});
}
class Task1 extends AsyncTask<String,Integer,String>{
//--onPreExecute方法用于在执行后台任务前做一些UI操作
@Override
protected void onPreExecute(){
Log.e(TAG,"task1的onPreExecute开始执行:");
tips_1.setText("开始执行 async task 任务。。。");
}
//--doInBackground方法内部执行后台任务,不可在此方法内修改UI
@Override
protected String doInBackground(String... strings) {
try {
Thread.sleep(500);
publishProgress(10);
Thread.sleep(600);
publishProgress(22);
Thread.sleep(1000);
publishProgress(42);
Thread.sleep(50);
publishProgress(43);;
Thread.sleep(250);
publishProgress(48);
Thread.sleep(1000);
publishProgress(68);
Thread.sleep(500);
publishProgress(78);
Thread.sleep(100);
publishProgress(80);
Thread.sleep(250);
publishProgress(85);
Thread.sleep(500);
publishProgress(95);
Thread.sleep(150);
publishProgress(98);
Thread.sleep(100);
publishProgress(100);
}
catch (Exception ed){
ed.printStackTrace();
}
return "执行完毕了吧?啊啊啊。。";
}
////onProgressUpdate方法用于更新进度信息
@Override
protected void onProgressUpdate(Integer... values){
progressBar_1.setProgress(values[0]);
tips_1.setText(String.valueOf("加载。。。"+values[0]+"%"));
}
////onPostExecute方法用于在执行完后台任务后更新UI,显示结果
@Override
protected void onPostExecute(String result){
Log.e(TAG,result);
tips_1.setText(result);
}
//onCancelled方法用于在取消执行中的任务时更改UI
@Override
protected void onCancelled(){
tips_1.setText("取消任务");
progressBar_1.setProgress(0);
}
}
}
<p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>