非同步操作之AsyncTask 和 Handler
1、AsyncTask
AsyncTask是比Handler更輕量級的非同步處理方案,非同步的操作都是為了不阻塞主執行緒。
使用AsyncTask是通過繼承抽象類實現的:public abstract class AsyncTask<Params, Progress, Result>
其中定義了三種泛型型別:Params、Progress和Result。
。Params啟動任務執行的輸入引數
。Progress是後臺執行的百分比(在進度提示方面很有用)
。Result是後臺執行任務最終返回的結果
AsyncTask中提供的非同步操作的方法:
1、execute(Params... params)
2、onPreExecute():在execute(Params... params)被呼叫後立即執行,一般用來在執行後臺任務前對UI做一些標記,顯示進度對話方塊等。
3、doInBackground(Params... params):在onPreExecute()完成後立即執行,用於執行較為費時的操作,此方法將接收輸入引數和返回計算結果。在執行過程中可以呼叫publishProgress(Progress... values)來更新進度資訊。
4、onProgressUpdate(Progress... values)
5、onPostExecute(Result result):當後臺操作結束時,此方法將會被呼叫,計算結果將做為引數傳遞到此方法中,直接將結果顯示到UI元件上。
6、onCancelled(X):當用戶呼叫取消時,執行的操作
使用AsyncTask類,必須遵守幾條規則:
。task的例項必須是在主執行緒中建立
。execute方法必須在主執行緒中呼叫
。不要手動呼叫onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個方法;
。task只能被執行一次,否則多次呼叫時將會出現異常
例項:
package vic.wong.main;
import android.os.AsyncTask;
import android.widget.ProgressBar;
import android.widget.TextView;
/**
* 生成該類的物件,並呼叫execute方法之後
* 首先執行的是onProExecute方法
* 其次執行doInBackgroup方法
*
*/
public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
private TextView textView;
private ProgressBar progressBar;
public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {
super();
this.textView = textView;
this.progressBar = progressBar;
}
/**
* 這裡的Integer引數對應AsyncTask中的第一個引數
* 這裡的String返回值對應AsyncTask的第三個引數
* 該方法並不執行在UI執行緒當中,主要用於非同步操作,所有在該方法中不能對UI當中的空間進行設定和修改
* 但是可以呼叫publishProgress方法觸發onProgressUpdate對UI進行操作
*/
@Override
protected String doInBackground(Integer... params) {
NetOperator netOperator = new NetOperator();
int i = 0;
for (i = 10; i <= 100; i+=10) {
netOperator.operator();
publishProgress(i);
}
return i + params[0].intValue() + "";
}
/**
* 這裡的String引數對應AsyncTask中的第三個引數(也就是接收doInBackground的返回值)
* 在doInBackground方法執行結束之後在執行,並且執行在UI執行緒當中 可以對UI空間進行設定
*/
@Override
protected void onPostExecute(String result) {
textView.setText("非同步操作執行結束" + result);
}
//該方法執行在UI執行緒當中,並且執行在UI執行緒當中 可以對UI空間進行設定
@Override
protected void onPreExecute() {
textView.setText("開始執行非同步執行緒");
}
/**
* 這裡的Intege引數對應AsyncTask中的第二個引數
* 在doInBackground方法當中,,每次呼叫publishProgress方法都會觸發onProgressUpdate執行
* onProgressUpdate是在UI執行緒中執行,所有可以對UI空間進行操作
*/
@Override
protected void onProgressUpdate(Integer... values) {
int vlaue = values[0];
progressBar.setProgress(vlaue);
}
}
2、Handler
AsyncTask
相關推薦
非同步操作之AsyncTask 和 Handler
1、AsyncTask AsyncTask是比Handler更輕量級的非同步處理方案,非同步的操作都是為了不阻塞主執行緒。 使用AsyncTask是通過繼承抽象類實現的:public abstract class AsyncTask<Params, Progress,
Android之——AsyncTask和Handler對比
AsyncTask和Handler對比 1 ) AsyncTask實現的原理,和適用的優缺點 AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現UI進度更
AsyncTask和Handler非同步執行緒之間的區別
當應用程式啟動時,Android首先會開啟一個主執行緒, 主執行緒為管理介面中的UI控制元件,進行事件分發,更新UI只能在主執行緒中更新,子執行緒中操作是危險的。這個時候,Handler就需要出來解決這個複雜的問題。由於Handler執行在主執行緒中(UI執行緒中),它與子執行緒可以通過Message物件來傳
Hadoop IO操作之SequenceFile 和 MapFile
直接 修改 head ati rec key 情況 接口 用戶 一、SquenceFile 文件中每條記錄是可序列化,可持久化的鍵值對,提供相應的讀寫器和排序器,寫操作根據壓縮的類型分為3種。 ---Write 無壓縮寫數據 ---RecordCompressWr
(轉)python selenium-webdriver 元素操作之滑鼠和鍵盤事件
參考資料:https://blog.csdn.net/zh175578809/article/details/76767748 參考資料2:https://blog.csdn.net/qq_41817302/article/details/79618654 selenium 提供了比較完整的鍵盤操作,
Java+Selenium3方法篇14-元素操作之輸入和點選
前面文章介紹完了driver的一些常見的瀏覽器設定和查詢元素的介面,接下來,我們找到了元素,是為了去操作元素。這篇介紹元素操作常見方法中的,給元素寫入一個字串,和點選元素。一般來講,給元素輸入一個字串,這樣的元素,一般是可以輸入文字,基本上是inputbox這
java8流式操作之對映和拍排序
對映分為 map和 flaterMap兩個 map: 介面一個lambda,將元素轉換成其他心事或提取資訊,即接收一個函式座位引數,該函式會被應用到每個元素上,冰將其對映成一個新的元素 flaterMap-- 接收一個函式作為引數,將流中的每個值都換成流另外一個流,然後把所有的流都連城一
簡要介紹一下asynctask和handler的優缺點
1 ) AsyncTask實現的原理,和適用的優缺點 AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現UI進度更新),最後反饋執行的結果給UI主執行緒. 使
AsyncTask和Handler對比
AsyncTask和Handler對比 1 ) AsyncTask實現的原理,和適用的優缺點 AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現
AsyncTask和Handler的優缺點比較
當應用程式啟動時,Android首先會開啟一個主執行緒, 主執行緒為管理介面中的UI控制元件,進行事件分發,更新UI只能在主執行緒中更新,子執行緒中操作是危險的。這個時候,Handler就需要出來解決這個複雜的問題。由於Handler執行在主執行緒中(UI執行緒中),它與子執行緒可以通過Message物件來
網路連線之Http及非同步操作AsyncTask
Http個人理解為是基於請求、響應,無狀態,應用層的超文字傳輸協議。其特點有:支援客戶端與伺服器之間互動模式;簡單快捷;靈活;無連線;無狀態。 Http介紹:HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系
C/C++ 文件操作之CreateFile、ReadFile和WriteFile
amp 列表 invalid bsp 功能 空間 out 系統 file 通常使用下列函數來通過Win系統來對外圍設備進行通信處理: ------------------------------- 1. CreateFile 這個函數的功能是創建或者打開一個文件或者I/
jQuery的DOM操作之設置和獲取HTML、文本和值 html()text()val()
java fontsize doc .text cti checkbox .net mar jsb 1. html()方法: 此方法類似於JavaScript中的innerHTML屬性,可以用來讀取或者設置某個元素中的html內容。 <html> <h
數據庫 之 表操作(DDL語句)和索引
數據庫 表操作 1 概述表是一種很重要的數據庫對象,是組成數據庫的基本元素,由若幹個字段組成。主要用來存儲數據記錄。表的操作,包含創建表、刪除表、修改表等。給表中的字段創建索引,將提高查詢的速度。表的操作涉及DDL: DataDefinationLanguage,數據定義語言,關鍵字:CREATE,
Go基礎之--排序和查找操作
ear () ola 方法 math https swa blog png 排序操作主要都在sort包中,導入就可以使用了import("sort") 常用的操作 sort.Ints:對整數進行排序sort.Strings:對字符串進行排序sort.Float64s:對
redis操作之叠代器(scan和hscan)講解
edi 服務器 cursor redis scan 模式 att 情況 叠代器 當我們需要遍歷Redis所有key或者指定模式的key時,首先想到的是KEYS命令,但是如果redis數據非常大,並且key也非常多的情況下,查詢的時候很可能會很慢,造成整個redis阻塞,那麽
Flask中之數據庫框架和模型類四:再述SQLAlchemy配置和基本操作之增刪改查
模糊 offset odi com app ack 字符 add () from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) #設置連接數據庫的URL
Python學習筆記字符串操作之isalpha()、isalnum()、isdecimal()、isspace()和istitle()方法
itl brush .com light supper isalnum 如果 小寫 分割 隨筆記錄方便自己和同路人查閱。 #------------------------------------------------我是可恥的分割線------------------
Python學習筆記字符串操作之rjust()、ljust()和icenter()方法對齊文本
字符串操作 int 圖片 方法 spa -c enter ice 第一個 隨筆記錄方便自己和同路人查閱。 #------------------------------------------------我是可恥的分割線--------------------------
scrapy框架之cookie和代理操作
一,scrapy傳送post請求 scrapy框架中預設傳送的是get請求,原始碼: scrapy.Spider父類中的start_request方法: def start_requests(self): cls = self.__class__ if