新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Android--異步任務(wù)AsyncTask
實(shí)例:使用異步任務(wù)從網(wǎng)絡(luò)上下載
網(wǎng)站設(shè)計(jì)制作過(guò)程拒絕使用模板建站;使用PHP+MYSQL原生開(kāi)發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營(yíng)了十年的創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司。
package com.example.xiaocool.anysctaskdemo; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URI; import java.net.URLConnection; public class MainActivity extends ActionBarActivity { private TextView show; private Button download; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); show = (TextView) this.findViewById(R.id.show_down); download = (Button) this.findViewById(R.id.button); download.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DownTask task = new DownTask(MainActivity.this); try { /** * 開(kāi)始執(zhí)行耗時(shí)的任務(wù) */ task.execute(new URI("http://news.baidu.com/")); } catch (Exception E) { E.printStackTrace(); } } }); } /** * Params 啟動(dòng)任務(wù)執(zhí)行的輸入?yún)?shù)的類型 * Progress 后臺(tái)任務(wù)完成的進(jìn)度值得類型, * Result 后臺(tái)執(zhí)行任務(wù)完成后 返回結(jié)果的類型 * 如果不需要指定類型 Void * * 重寫(xiě)的方法都有系統(tǒng)調(diào)用 */ class DownTask extends AsyncTask{ ProgressDialog progressDialog; //定義記錄已讀取行的數(shù)量 int hasRead = 0; Context mContext; public DownTask(Context context) { mContext = context; } /** * 后臺(tái)線程將要完成的任務(wù),該方法可以調(diào)用publishProgress(Progress value)更新任務(wù)的執(zhí)行進(jìn)度 * * @param params * @return */ @Override protected String doInBackground(URI... params) { StringBuilder sb = new StringBuilder(); try { URLConnection conn = params[0].toURL().openConnection(); //打開(kāi)conn連接對(duì)應(yīng)的輸入流,包裝成BufferReader 對(duì)象 BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream(), "utf-8") ); String line = null; while ((line = br.readLine()) != null) { sb.append(line + "\n"); hasRead++; //更新任務(wù)的執(zhí)行進(jìn)度 publishProgress(hasRead); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 在doInBackground方法中調(diào)用publishProgress(Progress value),更新任務(wù)的進(jìn)度后,就會(huì)觸發(fā)該方法 * * @param values */ @Override protected void onProgressUpdate(Integer... values) { show.setText("讀取了"+values[0]); progressDialog.setProgress(values[0]); } /** * 該方法將在執(zhí)行后臺(tái)耗時(shí)程序時(shí)被調(diào)用,該方法用于完成一些初始化的準(zhǔn)備工作,比如在界面上顯示進(jìn)度條 */ @Override protected void onPreExecute() { progressDialog = new ProgressDialog(mContext); progressDialog.setTitle("任務(wù)正在執(zhí)行中!"); progressDialog.setMessage("任務(wù)正在執(zhí)行中,稍后!!"); //取消按鈕不可用 progressDialog.setCancelable(false); progressDialog.setMax(202); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setIndeterminate(false); progressDialog.show(); } /** * 當(dāng)doInBackground方法完成后,系統(tǒng)會(huì)自動(dòng)調(diào)用該方法 并將doInBackground()的返回值傳給該方法 * * @param s */ @Override protected void onPostExecute(String s) { //返回HTML 頁(yè)面的內(nèi)容 show.setText(s); progressDialog.dismiss(); } } }
分享文章:Android--異步任務(wù)AsyncTask
URL鏈接:http://www.dlmjj.cn/article/ghgccj.html