异步类AsyncTask学习
来源:互联网 发布:java pdf转图片 编辑:程序博客网 时间:2024/06/05 15:21
异步类AsyncTask学习
AsyncTask是android当中封装好的一个异步类,用来简化异步操作。
异步类的主要目的是在子线程执行耗时的操作(连接网络,读取文件等),避免ANR。
AsyncTask传入三个泛型参数:
params:启动任务时输入参数的类型
progress:后台执行任务返回的进度值类型
result:后台执行完成后返回的结果类型
AsyncTask回调方法如下如所示:
下面实现了一个很简单的asynctask,模拟子线程连接网络。
MainActivity.java
package com.bupt.markfavor.demo0921async;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends AppCompatActivity { private TextView textView; private Button button; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.state); button = (Button) findViewById(R.id.button); progressBar = (ProgressBar) findViewById(R.id.progressbar); progressBar.setMax(100); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyAsyncTask myAsyncTask = new MyAsyncTask(textView,progressBar); myAsyncTask.execute(10); } }); }}
这里定义了一个文本框,进度条,按钮。进度条可以显示任务进程的执行情况。
MyAsyncTask.java
package com.bupt.markfavor.demo0921async;import android.os.AsyncTask;import android.util.Log;import android.widget.ProgressBar;import android.widget.TextView;public class MyAsyncTask extends AsyncTask<Integer,Integer,String> { private static final String TAG = "MyAsyncTask"; private TextView textView; private ProgressBar progressBar; public MyAsyncTask(TextView textView, ProgressBar progressBar) { super(); this.textView=textView; this.progressBar=progressBar; } @Override protected void onPostExecute(String result) { textView.setText("异步操作执行结束,返回结果:"+result); } @Override protected void onPreExecute() { super.onPreExecute(); textView.setText("开始执行异步线程"); } @Override protected void onProgressUpdate(Integer... values) { int value=values[0]; progressBar.setProgress(value); } @Override protected String doInBackground(Integer... params) { int i; DataOperator myDataOperator = new DataOperator(); for (i=params[0];i<=100;i+=10){ Log.e(TAG, "doInBackground: "+Thread.currentThread().getName() ); myDataOperator.dataOperator(); publishProgress(i);//传入进度值 } return "ok"; } }
上边的代码按照之前图片里的内容实现了异步任务的复写,operator实现了线程睡眠一秒,让过程更清晰。
package com.bupt.markfavor.demo0921async;import android.util.Log;/** * Created by markfavor on 2017/9/21. */public class DataOperator { private static final String TAG = "DataOperator"; public void dataOperator() { try { Log.e(TAG, "DataOperator: "+Thread.currentThread().getName() ); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }}
最后加上布局文件。progressbar里的style控制progressbar的形状。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bupt.markfavor.demo0921async.MainActivity" android:orientation="vertical"> <TextView android:id="@+id/state" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="progress" /> <ProgressBar android:id="@+id/progressbar" android:layout_width="match_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Horizontal"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button"/></LinearLayout>
阅读全文
0 0
- 异步类AsyncTask学习
- Android 异步类AsyncTask学习
- android 学习--异步任务类AsyncTask
- AsyncTask--异步任务学习
- android异步类AsyncTask
- android 异步类 AsyncTask
- 【Android】AsyncTask异步类
- AsyncTask异步类
- AsyncTask异步任务类
- AsyncTask异步工具类
- Android AsyncTask异步的学习
- AsyncTask异步处理学习总结
- Android异步操作AsyncTask学习
- Android学习篇章42-AsyncTask-异步任务类
- AsyncTask类详解 异步执行
- Android异步操作----AsyncTask类
- android异步操作类----AsyncTask
- 异步操作类AsyncTask 详解
- apache ab 并发负载压力测试
- node进程管理pm2
- 支付宝小程序(ble 适配android和ios) 入门一
- C++ 之 constexpr And shared_ptr
- Windows RPC编程详解
- 异步类AsyncTask学习
- 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)
- [android]父子控件之间响应焦点状态
- 移植tslib编译问题
- Controller注解记录
- C语言volatile关键字
- 定时任务:Java中Timer和TimerTask的使用
- kafka9重复消费问题解决
- mysql的备份和还原