01 AsyncTask基本使用

2021-07-11 03:28:17 字數 2123 閱讀 2574

首先,什麼是

asynctask呢?

asynctask的意思是 非同步任務

非同步是什麼意思呢?

非同步就是不在當前的執行緒,

在其他執行緒進行操作

.在同乙個執行緒就是同步

.我們一般把一些耗時的操作放到子執行緒中去,

因為主線程如果長時間沒有響應

,系統會提示乙個無響應對話方塊

一般主線程

(activity,service)是5

秒,broadcastreceiver是10

秒.

然後我們會在子執行緒中的runonuithread

方法中(

也就是在主線程

)中更新

ui.

runonuithread內部其實使用的也是

handler,

所以其實我們之前一直用

thread

和handler

兩者結合的方式來處理耗時的操作.

每次都這麼寫很麻煩,

所以android

給我們提供了乙個工具

asynctask,

專門用來處理又有耗時操作又要更新介面的一些需求

.我們在activity

中建立乙個類來繼承

asynctask

private class myasynctask extends asynctask{

這裡asynctask

會讓我們傳入

3個引數

,我們等下再解釋

,先傳入3個

void.

然後系統會提示實現乙個抽象方法,

我們實現一下

protected void doinbackground(void... params){

return null;

我們發現這個方法的返回型別不是void,

而是大寫的

void,

而且引數是可變引數

void陣列.

這個doinbackground

方法顧名思義就是在後台操作

background後台的意思其實就是子執行緒.

我們可以在這個方法中處理耗時操作.

我們再來實現乙個方法

protected void onpostexecute(integer... values) {

super.onpostexecute(values);

這個方法叫做更新進度,

其實就是更新介面ui

現在你應該有一些頭緒了,沒錯,

這個類就是把耗時操作放到

doinbackground

方法內,

把更新ui

的操作方到

onpostexecute

方法裡.

就是這麼簡單

protected void onpreexecute(){

super.onpreexecute();

叫做執行之前,

其實就是進行耗時操作之前的一些準備工作

,既然是在耗時操作之前

,這個方法自然就是在主線程執行

那麼現在三個方法onpreexecute,doinbackground,onpostexecute,

先後分別就是在 主線程

,子執行緒

,主線程中執行

.我們在onproexecute裡面

new乙個

progressdialog

mpd=new progressdialog(mainactivity.this);

mpd.setprogressstyle(progressdialog.style_horizontal);

mpd.show();

這樣的話就是新建了乙個進度條,

然後展示

然後我們在doinbackground裡面

systemclock.sleep(5000);

這樣是模擬乙個最簡單的耗時操作,5秒

然後在onpostexecute裡面

mpd.dismss();

讓進度條消失.

然後在oncreate

方法裡面執行非同步任務

asynctask

new myasynctask().execute();

AsyncTask 使用解析

asynctask 能夠適當的,簡單的用於ui執行緒,我們可以很方便的去使用,不用自己去開啟執行緒。asynctask執行機制是這樣的 所有的任務都會在後台執行緒上執行,最後直接在ui執行緒上發布。繼承asnyctask需要至少覆蓋 doinbackgroud params 方法,一般也會去覆蓋 o...

AsyncTask使用原則

首先要明確android 之所以有 handler 和asynctask 都是為了不堵塞主線程 ui執行緒 且 ui的更新只能在主線程中完成,因此一步處理是不可避免的。android1.5提供了乙個工具類 asynctask,它使建立需要與使用者介面互動的長時間執行的任務變得更簡單。不需要借助執行緒...

AsyncTask 簡單使用

import import android.os.asynctask import android.os.bundle import android.widget.progressbar import android.widget.textview public class myasynctaskd...