AsyncTask学习笔记
来源:互联网 发布:戏说乾隆知乎 编辑:程序博客网 时间:2024/05/16 01:21
AsyncTask介绍
AsyncTask是一个轻量级的处理线程更新Android UI 的方式,AsyncTack是个抽象类,使用时应该继承它,它定义了3个泛型 1. Params:启动任务执行时输入的参数 2. Progress:后台任务完成时的数据类型 3. Result:后台任务结束时返回的数据类型
AsyncTask使用
1. 为上面三个泛型指定具体数据类型 2. 必须实现doInBackground()方法 3. 根据业务来实现不同的方法:onProgressUpdate onPreExecute onPostExecute方法 4. 调用AnsyncTask子类实例
注:必须在UI线程中创建AsyncTask的实例
必须在UI线程中调用AsyncTask的excute方法
每个AsyncTask只能执行一次,否则会报错
AsyncTask方法调用顺序
1. 首先调用onPreExecute方法,一般是初始化各种控件 2. 执行onInbBackground执行目的任务 3. 任务不断调用publishProgress更新进度,也就相当于调用了onProgressUpdate方法 4. 任务完成调用onPostExecute并且把返回值传递给onPostExecute
AsyncTask实例
介绍:使用AsyncTask来下载并且显示到界面
java代码
package com.phone.hty.myapplication;import android.app.ProgressDialog;import android.content.Context;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;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 MainActivity extends AppCompatActivity { private TextView mMteTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMteTextView = (TextView) findViewById(R.id.textView); Button button = (Button) findViewById(R.id.myButton); assert button != null; button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyAsyncStack myAsyncStack = new MyAsyncStack(MainActivity.this); try { myAsyncStack.execute(new URL("http://110.65.7.96:8080/hty.txt")); } catch (MalformedURLException e) { e.printStackTrace(); } } }); } class MyAsyncStack extends AsyncTask<URL, Integer, String> { ProgressDialog progressDialog; int length; Context mContext; public MyAsyncStack(Context context) { mContext = context; } /** * 描述:AsyncStack * 参数:URL * 形参: * 时间:2016/3/2714:18 */ @Override protected String doInBackground(URL... params) { StringBuilder stringBuilder = new StringBuilder(); try { URLConnection connection = params[0].openConnection(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8" )); String line = null; while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line + "\n"); length++; publishProgress(length); }return stringBuilder.toString(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * Runs on the UI thread before {@link #doInBackground}. * * @see #onPostExecute * @see #doInBackground */ @Override protected void onPreExecute() { progressDialog = new ProgressDialog(mContext); progressDialog.setTitle("人物进行中"); progressDialog.setMessage("请等待"); progressDialog.setCancelable(false); progressDialog.setMax(202); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setIndeterminate(false); progressDialog.show(); } /** * Runs on the UI thread after {@link #publishProgress} is invoked. * The specified values are the values passed to {@link #publishProgress}. * * @param values The values indicating progress. * @see #publishProgress * @see #doInBackground */ @Override protected void onProgressUpdate(Integer... values) { mMteTextView.setText("已经读取了" + values[0] + "行"); progressDialog.setProgress(values[0]); } /** * <p>Runs on the UI thread after {@link #doInBackground}. The * specified result is the value returned by {@link #doInBackground}.</p> * <p/> * <p>This method won't be invoked if the task was cancelled.</p> * * @param s The result of the operation computed by {@link #doInBackground}. * @see #onPreExecute * @see #doInBackground * @see #onCancelled(Object) */ @Override protected void onPostExecute(String s) { mMteTextView.setText(s); progressDialog.dismiss(); } }}
0 0
- Android学习笔记---AsyncTask
- Android AsyncTask学习笔记
- AsyncTask学习笔记
- AsyncTask学习笔记
- AsyncTask学习笔记
- AsyncTask学习笔记
- AsyncTask学习笔记
- AsyncTask学习笔记
- AsyncTask学习笔记
- AsyncTask学习笔记
- Android学习笔记之AsyncTask
- android 学习笔记 使用AsyncTask
- android学习笔记(七)AsyncTask
- Android应用开发学习笔记之AsyncTask
- android学习笔记1: AsyncTask使用
- Android学习笔记(39):异步任务AsyncTask
- Android学习笔记1-AsyncTask的用法
- Android之AsyncTask的学习笔记
- 大数相加
- 删除所有相同的元素
- Sublime Text 中使用Markdown
- VB课感想
- 第五周实践项目1————三角形的雏形(3)
- AsyncTask学习笔记
- Spring的设计目标
- hdoj Joseph 1443 (约瑟夫环&打表)
- 去掉listview 的点击效果和Item的click事件和Item里的button等子控件的click事件同时生效的解决办法
- Git push时重复输入用户名密码的问题
- iphone5s如何省电?耗电费电如何处理?iphone5s耗电费电解决方法
- Netty3 VS Netty4 之线程模型
- Volley框架源码分析
- hdu1224 Free DIY Tour--DP