Android菜鸟的成长笔记(13)——异步任务(Async Task)
生活随笔
收集整理的這篇文章主要介紹了
Android菜鸟的成长笔记(13)——异步任务(Async Task)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android菜鳥的成長(zhǎng)筆記(13)——異步任務(wù)(Async Task)
posted on 2014-02-22 22:54 NET未來之路 閱讀(...) 評(píng)論(...) 編輯 收藏
原文: [置頂] Android菜鳥的成長(zhǎng)筆記(13)——異步任務(wù)(Async Task)
Android的UI線程主要負(fù)責(zé)處理用戶的事件及圖形顯示,因此主線程UI不能阻塞,否則會(huì)彈出一個(gè)ANR(Application Not Responding)異常,所以不能在UI線程中執(zhí)行耗時(shí)操作。AsyncTask<>是一個(gè)抽象類,通常被繼承,繼承時(shí)需要指定三個(gè)泛型: AsyncTask<Params, Progress, Result> Params:啟動(dòng)任務(wù)執(zhí)行的輸入?yún)?shù)的類型 Progress:后臺(tái)任務(wù)完成的進(jìn)度值的類型 Result:后臺(tái)執(zhí)行任務(wù)完成后返回結(jié)果的類型 例子:從http://m.blog.csdn.net/blog/lxq_xsyu異步加載數(shù)據(jù)到手機(jī)上并顯示(詳細(xì)請(qǐng)看注釋) MainActivity.java package com.example.testasyntask;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection;import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.webkit.WebView; import android.widget.TextView;public class MainActivity extends Activity {private TextView show;private WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show = (TextView) findViewById(R.id.textView1);webView = (WebView) findViewById(R.id.webview);}public void download(View source) throws MalformedURLException{DownTask task = new DownTask(this);task.execute(new URL("http://m.blog.csdn.net/blog/lxq_xsyu"));}class DownTask extends AsyncTask<URL, Integer, String>{ProgressDialog pdialog;Context mContext;int hasRead = 0;public DownTask(Context ctx){mContext = ctx;}/*** 該方法在執(zhí)行后臺(tái)耗時(shí)操作前被調(diào)用,初始化*/@Overrideprotected void onPreExecute() {pdialog = new ProgressDialog(mContext);pdialog.setTitle("任務(wù)正在執(zhí)行中");pdialog.setMessage("任務(wù)正在執(zhí)行中,請(qǐng)耐心等待...");pdialog.setCancelable(false);pdialog.setMax(182);pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pdialog.setIndeterminate(false);pdialog.show();}/*** 重寫該方法就是后臺(tái)線程將要完成的任務(wù),該方法可以調(diào)用* publishProgress(Progress.. values)方法更新任務(wù)的執(zhí)行進(jìn)度。*/@Overrideprotected String doInBackground(URL... params) {StringBuilder sb = new StringBuilder();try {URLConnection conn = params[0].openConnection();BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));String line = null;while((line = br.readLine()) != null){sb.append(line + "\n");hasRead++;publishProgress(hasRead);}return sb.toString();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}}/*** 當(dāng)doInBackground完成后,系統(tǒng)自動(dòng)調(diào)用*/@Overrideprotected void onPostExecute(String result) {//show.setText(result);webView.loadDataWithBaseURL(null, result, "text/html", "utf-8", null);pdialog.dismiss();}@Overrideprotected void onProgressUpdate(Integer... values) {show.setText("已經(jīng)讀取了【" + values[0] + "】行!");pdialog.setProgress(values[0]);}} } activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:gravity="center_horizontal"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="102dp"android:text="TextView" /><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="31dp"android:text="開始下載" android:onClick="download"/><WebView android:id="@+id/webview"android:layout_width="match_parent"android:layout_height="wrap_content"/> </LinearLayout> 運(yùn)行結(jié)果: ? ? ? ? ? ? ?posted on 2014-02-22 22:54 NET未來之路 閱讀(...) 評(píng)論(...) 編輯 收藏
轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3561442.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Android菜鸟的成长笔记(13)——异步任务(Async Task)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万能数据库查询分析器使用技巧之(十四)
- 下一篇: Android UI线程和非UI线程