Android 施用AsyncTask更新UI

Android 使用AsyncTask更新UIAsyncTask可以轻松容易的跟新UI,而开发者需要做的是在不同的回调函数中嵌入代

Android 使用AsyncTask更新UI

AsyncTask可以轻松容易的跟新UI,而开发者需要做的是在不同的回调函数中嵌入代码逻辑即可。关于Android中的线程相关内容,可以参考开发者网站:developer.android.com/guide/components/processes-and-threads.html

?

开发者网站对AsyncTask的说明已经很明确了,参考地址:http://developer.android.com/reference/android/os/AsyncTask.html,下面从代码角度看看实现过程:

    继承AsyncTask,定义自己的异步任务;在自定义AsyncTask中的回调函数中嵌入操作逻辑;创建AsyncTask并执行;

主要代码:

import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.view.Window;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class RefreshUIActivity extends Activity implements OnClickListener {    private TextView textView;private Button refreshButton;/** * 标识异步任务 */private int identifier;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                requestWindowFeature(Window.FEATURE_PROGRESS);setProgressBarVisibility(true);                setContentView(R.layout.main);                textView = (TextView) findViewById(R.id.textView1);        refreshButton = (Button) findViewById(R.id.button1);                refreshButton.setOnClickListener(this);            }@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1:// 创建异步任务CustomizedAsyncTask task = new CustomizedAsyncTask(++identifier);task.execute("0", "25", "50", "75", "100");task = null;break;default:break;}}class CustomizedAsyncTask extends AsyncTask<String, Integer, String> {private String identifier;public CustomizedAsyncTask(int id) {identifier = "[" + id + "]";}@Overrideprotected void onCancelled() {super.onCancelled();textView.append(identifier + "onCancelled\n");}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);textView.append(identifier + "onPostExecute result:" + result + "\n");}@Overrideprotected void onPreExecute() {super.onPreExecute();textView.append(identifier + "onPreExecute\n");}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);setProgress(values[0] * 100);textView.append(identifier + "onProgressUpdate Value: " + values[0] + "%\n");}@Overrideprotected String doInBackground(String... params) {for (String param : params) {try {// 模拟费时操作Thread.sleep(2 * 1000);// 触发onProgressUpdate方法publishProgress(Integer.valueOf(param));} catch (Exception e) {e.printStackTrace();}System.out.println(param);}System.out.println(identifier + "doInBackground");return "Finished";}}}

?说明:

关于AsyncTask的各个回调函数就不做说明,参考开发者文档即可;在自定义的AsyncTask的回调函数中,可以更新UI的函数内都出现了对textView的更新操作;还有其它方法更新UI,只要可以达到操作要求,又能让代码易于理解,哪种方式倒是无所谓;

布局文件:

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <TextView            android:id="@+id/textView1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"/>        <Button            android:id="@+id/button1"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:text="RefreshUI" />    </LinearLayout></ScrollView>

?一次点击运行效果:


Android 施用AsyncTask更新UI
?
Android 施用AsyncTask更新UI
?
Android 施用AsyncTask更新UI
?
Android 施用AsyncTask更新UI
?

四次点击运行结果:


Android 施用AsyncTask更新UI
?

多说一句:千万不要在protected String doInBackground(String... params)方法中操作UI哦!:)

?

?

?

?