Android AsyncTask 异步任务
来源:互联网 发布:淘宝展现量 编辑:程序博客网 时间:2024/06/07 01:03
摘自《疯狂Android讲义 第3版》
AsyncTask<Params, Progress, Result>是一个抽象类,通常被继承,继承AsyncTask时需要指定如下三个泛型参数:
1.Params:启动任务执行的输入参数的类型。
2.Progress:后台任务完成的进度值的类型。
3.Result:后台任务执行完成后返回结果的类型。
使用AsyncTask只需要三个步骤:
1.创建AsyncTask的子类,并为三个泛型参数指定类型。如果某个泛型参数不需要指定类型,可将其设为void
2.根具需要,实现AsyncTask如下方法:
a.doInBackground(Params...):重写该方法就是后台线程将要完成的任务。该方法可以调用publishProgress(Progress... values)方法更新任务的执行进度。
b.onProgressUpdate(Params... values):在doInBackground()方法中调用publishProgress方法更新任务的执行进度后,将会触发该方法。
c.onPreExecute():该方法在执行后台耗时操作前被调用。通常该方法用于完成一些初始化的准备工作,比如在界面显示进度条等。
d.onPostExecute(Result result):当doInBackground()完成后,系统会自动调用onPostExecute()方法,并将doInBackground()方法的返回值传给该方法。
3.调用AsyncTask子类的实例的execute(Params... params)开始执行耗时操作。
使用AsyncTask时必须遵循以下规则:
1.必须在UI线程中创建AsyncTask的实例。
2.必须在UI线程中调用AsyncTask的execute()方法。
3.AsyncTask的onPreExecute(),onPostExectue(),doInBackground(),onProgressUpdate()方法不应该由程序员调用,面是由系统负责调用。
4.每个AsyncTask只能被执行一次,多次调用将会引发异常。
因本程序使用了网络功能,所以需要在Mainfest.xml里加入此权限:
<uses-permission android:name="android.permission.INTERNET" />
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="shortcut.song.com.myapplication.AsyncTaskActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Down" android:onClick="download" /> <TextView android:id="@+id/text_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="some string"/></LinearLayout>
package shortcut.song.com.myapplication;import android.app.ProgressDialog;import android.content.Context;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;public class AsyncTaskActivity extends AppCompatActivity { private TextView show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_async_task); show = (TextView)findViewById(R.id.text_show); } public void download(View v) throws MalformedURLException { DowndLoadTask task = new DowndLoadTask(this); task.execute(new URL("http://www.crazyit.org/ethos.php")); } class DowndLoadTask extends AsyncTask<URL, Integer, String> { ProgressDialog progressDialog; int hasRead = 0; Context mContext; public DowndLoadTask(Context context) { mContext = context; } @Override protected 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(Exception e){ } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); show.setText(s); progressDialog.dismiss(); } @Override protected void onPreExecute() { super.onPreExecute(); progressDialog = new ProgressDialog(mContext); progressDialog.setTitle("Task"); progressDialog.setMessage("Task running"); progressDialog.setCancelable(false); progressDialog.setMax(200); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setIndeterminate(false); progressDialog.show(); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); show.setText("Readed " + values[0] +"Lined"); progressDialog.setProgress(values[0]); } }}
- Android异步任务AsyncTask
- Android--AsyncTask异步任务
- Android AsyncTask异步任务
- Android 异步任务 AsyncTask
- android 异步任务 AsyncTask
- Android AsyncTask 异步任务
- Android AsyncTask异步任务
- 【Android】异步任务AsyncTask
- Android AsyncTask异步任务
- android AsyncTask异步任务
- Android异步任务AsyncTask
- Android:AsyncTask -- 异步任务
- Android 异步任务:AsyncTask
- Android异步任务AsyncTask
- Android异步任务AsyncTask
- Android异步任务AsyncTask
- Android AsyncTask异步任务
- Android 异步任务AsyncTask
- SSMS2016打开时出现“Cannot find one or more components.please reinstall the application”
- 加载内容存在多个个表里的信息
- 专利法三十三条
- MFC与opencv的结合:在MFC界面上显示opencv处理的效果图
- java.util.LinkedList
- Android AsyncTask 异步任务
- QA的几点思考
- linux ls -l 详解
- js 学习资源
- spring mvc注解
- 如何使用FastDFS上传图片
- IOS
- 商店选址问题-SSL 1760
- PXE启动错误代码一览表