AsyncTask——小白实训笔记

AsyncTask

1.什么是AsyncTask?

  • Async Task是 Android提供的轻量级(实现代码量少)的异步类。
  • 为了降低异步通信的开发难度,提供了 Asynctask。
  • Asynctask直接继承于object类,位于 android os包中。
  • 使用 Asynctask可以忽略Looper、MessageQueue、Hander等复杂对象,便捷的完成异步耗时操作。

    AsyncTask的执行过程:
    U线程→启动 Async Task→执行耗时操作→接收消息

2.如何使用AsyncTask

使用 AsyncTask步骤:
1)新建内部类继承 Async Task;
2)定义 Asynctask的三种泛型参数
3)重写doluBackGround抽象方法;
4)重写onPreExcute方法;
5)重写onProgressUpdate方法;
6)重写onPostExecute方法;
7)在需要启动的地方调用execute方法。

3.使用 Asynctask做倒计时(附代码)

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.example.texthandler.Main4Activity">
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="设置时间"
        android:textSize="30sp"/>
    <EditText
        android:id="@+id/szsj4"
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:layout_toRightOf="@+id/text1"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="秒"
        android:layout_toRightOf="@+id/szsj4"
        android:textSize="30sp"/>
    <TextView
        android:id="@+id/djs_text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:text="倒计时"
        android:textSize="30dp"/>
    <Button
        android:id="@+id/djs_btn4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始倒计时"
        android:layout_below="@+id/djs_text4"
        android:layout_centerHorizontal="true"/>
</RelativeLayout>

java代码:

package com.example.texthandler;

import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Main4Activity extends AppCompatActivity {

    private TextView djstext4;
    private Button djsbtn4;
    private EditText djset4;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        bindID();
        djsbtn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new MyTask().execute();
            }
        });

    }
    private void bindID() {
        djstext4=findViewById(R.id.djs_text);
        djsbtn4=findViewById(R.id.djs_btn);
        djset4=findViewById(R.id.szsj);

    }
    class  MyTask extends AsyncTask<Integer,Integer,String>{

        @Override
        protected String doInBackground(Integer... integers) {
            for (int i=integers[0];i>0 ;i--){
                try{
                    Thread.sleep(1000);
                    publishProgress(i);//调用onProgressUpdate方法
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return "计时结束";
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            djstext4.setText(values[0]+"");
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            djstext4.setText(s);
        }
    }
}

4.使用 Asynctask做进度条(附代码)

xml代码:


    <TextView
        android:id="@+id/download_text"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:textSize="30sp"
        android:text="开始下载"/>

    <Button
        android:id="@+id/doswnload_btn"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text="开始下载"
        android:textSize="30sp"/>
    <ProgressBar
        android:id="@+id/progress_bar"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="60dp" />

java代码:

public class ATActivity extends AppCompatActivity {
    private Button downloadBtn;
    private TextView downloadText;
    private ProgressBar downloadBar;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_at);

        bindID();

        downloadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Mytask mt = new Mytask();
                mt.execute(1000);
            }
        });
    }

    private void bindID() {
        downloadBtn = findViewById(R.id.doswnload_btn);
        downloadText = findViewById(R.id.download_text);
        downloadBar=findViewById(R.id.progress_bar);
    }

    public class Mytask extends AsyncTask<Integer, Integer, String> {
        //耗时操作执行前,调用此方法
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            downloadText.setText("正在下载");
        }

        //执行耗时操作
        @Override
        protected String doInBackground(Integer... Integer) {//...代表参数个数是不确定的

            for (int i = 0; i < 10; i++) {
                try {
                    Thread.sleep(Integer[0]);
                    publishProgress(i);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return "下载完成";
        }

        //耗时操作完成后,调用此方法
        @Override
        protected void onPostExecute(String s) {
            downloadText.setText(s);
            super.onPostExecute(s);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            downloadBar.setProgress(values[0]);
        }
    }
}

5.Execute()和 executeonexecutor有何区别?

1)执行execute()方法线程可以只能串行运行。
2)执行executeOnExecuter()方法线程并行运行,不过同一时间只能启动五个线程。

6.更喜欢 Asynctask还是更喜欢 Handler,为什么?

更喜欢Hanadler,Handle结构清晰,功能定义明确,对于多个后台任务时,简单,清晰。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到了在使用AsyncTask时,可以在onPostExecute方法中进行线程完成后的操作。这个方法通常被用来将结果传递回主线程。例如,可以在这个方法中更新UI界面。AsyncTask的使用可以通过创建一个继承于AsyncTask的类来实现,然后在需要的地方调用execute方法来执行任务。引用给出了一个使用AsyncTask的示例,其中定义了一个继承于AsyncTask的InsertAsyncTask类。这个类可以用来在后台线程中执行数据库操作。引用提到了一个使用AsyncTask来加载网络图片的例子,其中使用了LruCache算法进行图片的缓存。综上所述,AsyncTask可以用于数据库操作,通过继承AsyncTask并在doInBackground方法中进行数据库操作,然后在onPostExecute方法中进行结果的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Jetpack学习笔记(一):使用Room和AsyncTask来处理数据库](https://blog.csdn.net/XiaoYunKuaiFei/article/details/105639153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Android Lrucache加载图片(AsyncTask )](https://download.csdn.net/download/u011846345/9184327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值