android 异步处理技术,Android笔记 - 异步处理技术

文章目录

Android异步处理技术

Thread

创建线程的两种方法

继承Thread类并重写run方法

public class MyThread extend Thread{

@Override

public void run(){

//实现具体逻辑

}

}

public void startThread(){

MyThread myThread = new MyThread();

myThread.start(); //启动线程

}

实现Runnable接口并实现run方法

public class MyRunnable implements Runable{

@Override

public void run(){

//实现具体逻辑,例如文件读写,网络请求等

}

}

public void startThread(){

MyRunnable runnable = new MyRunnable();

Thread thread = new Thread(runable);

thread.start();

}

Android中的三种线程

主线程:操作UI,运行Android组件。

Binder线程:用于不同进程之间线程的通信,系统管理。

后台线程:应用创建,执行应用逻辑。

AsyncTask

定义

一个Android已封装好的轻量级异步类

属于抽象类

使用步骤

创建 AsyncTask子类 & 根据需求实现核心方法

创建 AsyncTask子类的实例对象(即 任务实例)

手动调用execute()从而执行异步线程任务

代码示例

/**

* 步骤1:创建AsyncTask子类

* 注:

* a. 继承AsyncTask类

* b. 为3个泛型参数指定类型;若不使用,可用java.lang.Void类型代替

* c. 根据需求,在AsyncTask子类内实现核心方法

*/

private class MyTask extends AsyncTask {

....

// 方法1:onPreExecute()

// 作用:执行 线程任务前的操作

// 注:根据需求复写

@Override

protected void onPreExecute() {

...

}

// 方法2:doInBackground()

// 作用:接收输入参数、执行任务中的耗时操作、返回 线程任务执行的结果

// 注:必须复写,从而自定义线程任务

@Override

protected String doInBackground(String... params) {

...// 自定义的线程任务

// 可调用publishProgress()显示进度, 之后将执行onProgressUpdate()

publishProgress(count);

}

// 方法3:onProgressUpdate()

// 作用:在主线程 显示线程任务执行的进度

// 注:根据需求复写

@Override

protected void onProgressUpdate(Integer... progresses) {

...

}

// 方法4:onPostExecute()

// 作用:接收线程任务执行结果、将执行结果显示到UI组件

// 注:必须复写,从而自定义UI操作

@Override

protected void onPostExecute(String result) {

...// UI操作

}

// 方法5:onCancelled()

// 作用:将异步任务设置为:取消状态

@Override

protected void onCancelled() {

...

}

}

/**

* 步骤2:创建AsyncTask子类的实例对象(即 任务实例)

* 注:AsyncTask子类的实例必须在UI线程中创建

*/

MyTask mTask = new MyTask();

/**

* 步骤3:手动调用execute(Params... params) 从而执行异步线程任务

* 注:

* a. 必须在UI线程中调用

* b. 同一个AsyncTask实例对象只能执行1次,若执行第2次将会抛出异常

* c. 执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()

* d. 不能手动调用上述方法

*/

mTask.execute();

简单进度条DEMO

MainActivity.java

package com.dannydiao.androidhelloworld;

import android.os.AsyncTask;

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 {

Button start;

Button stop;

TextView textView1;

ProgressBar progressBar;

MyTask myTask;

private class MyTask extends AsyncTask {

@Override

protected String doInBackground(String... params) {

try {

int count = 0;

int length = 1;

while (count < 99) {

count = count + length;

publishProgress(count);

Thread.sleep(50);

}

} catch (InterruptedException e) {

e.printStackTrace();

}

return null;

}

@Override

protected void onProgressUpdate(Integer... progresses) {

progressBar.setProgress(progresses[0]);

String string = "加载中..." + progresses[0] + "%";

textView1.setText(string);

}

@Override

protected void onPostExecute(String s) {

textView1.setText("加载完毕");

}

@Override

protected void onCancelled() {

textView1.setText("已取消");

progressBar.setProgress(0);

}

@Override

protected void onPreExecute() {

textView1.setText("加载中");

}

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView1 = findViewById(R.id.text);

start = findViewById(R.id.button);

stop = findViewById(R.id.button2);

progressBar = findViewById(R.id.progressbar);

stop = findViewById(R.id.button2);

myTask = new MyTask();

start.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

myTask.execute();

}

});

stop.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

myTask.cancel(true);

}

});

}

}

activity_main.xml

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=".MainActivity">

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="开始加载"

app:layout_constraintBottom_toTopOf="@id/text"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/text"

app:layout_constraintBottom_toTopOf="@id/progressbar"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"/>

android:id="@+id/progressbar"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:max="100"

android:progress="0"

app:layout_constraintBottom_toTopOf="@id/button2"/>

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="停止"

app:layout_constraintTop_toBottomOf="@id/progressbar"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

app:layout_constraintBottom_toBottomOf="parent"

/>

标签:异步,...,void,笔记,AsyncTask,protected,线程,Override,Android

来源: https://blog.csdn.net/weixin_42456225/article/details/90379266

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值