Android涔婬andler涓嶢syncTask鐨勫尯鍒?杞
1 锛?AsyncTask瀹炵幇鐨勫師鐞?鍜岄€傜敤鐨勪紭缂虹偣
AsyncTask,鏄痑ndroid鎻愪緵鐨勮交閲忕骇鐨勫紓姝ョ被,鍙互鐩存帴缁ф壙AsyncTask,鍦ㄧ被涓疄鐜板紓姝ユ搷浣?骞?/strong>鎻愪緵鎺ュ彛鍙嶉褰撳墠寮傛鎵ц鐨勭▼搴?/strong>(鍙互閫氳繃鎺ュ彛瀹炵幇UI杩涘害鏇存柊),鏈€鍚庡弽棣堟墽琛岀殑缁撴灉缁橴I涓荤嚎绋?
浣跨敤鐨勪紭鐐?
l聽 绠€鍗?蹇嵎
l聽 杩囩▼鍙帶
聽聽聽聽聽聽聽
浣跨敤鐨勭己鐐?/strong>:
l聽 鍦ㄤ娇鐢ㄥ涓紓姝ユ搷浣滃拰骞堕渶瑕佽繘琛孶i鍙樻洿鏃?灏卞彉寰楀鏉傝捣鏉?
2 锛塇andler寮傛瀹炵幇鐨勫師鐞嗗拰閫傜敤鐨勪紭缂虹偣
聽
鍦℉andler 寮傛瀹炵幇鏃?娑夊強鍒?Handler, Looper, Message,Thread鍥涗釜瀵硅薄锛屽疄鐜板紓姝ョ殑娴佺▼鏄富绾跨▼鍚姩Thread锛堝瓙绾跨▼锛壝爐hread(瀛愮嚎绋?杩愯骞剁敓鎴怣essage-脿Looper鑾峰彇Message骞朵紶閫掔粰Handler脿Handler閫愪釜鑾峰彇Looper涓殑Message锛屽苟杩涜UI鍙樻洿銆?/p>
浣跨敤鐨勪紭鐐癸細
l聽 缁撴瀯娓呮櫚锛屽姛鑳藉畾涔夋槑纭?/p>
l聽 瀵逛簬澶氫釜鍚庡彴浠诲姟鏃讹紝绠€鍗曪紝娓呮櫚
聽 聽
浣跨敤鐨勭己鐐癸細
l聽 鍦ㄥ崟涓悗鍙板紓姝ュ鐞嗘椂锛屾樉寰椾唬鐮佽繃澶氾紝缁撴瀯杩囦簬澶嶆潅锛堢浉瀵规€э級
AsyncTask鐩存帴缁ф壙浜嶰bject绫伙紝浣嶇疆涓篴ndroid.os.AsyncTask銆傝浣跨敤AsyncTask宸ヤ綔鎴戜滑瑕佹彁渚涗笁涓硾鍨嬪弬鏁帮紝骞堕噸杞藉嚑涓柟娉?鑷冲皯閲嶈浇涓€涓?銆?/p>
聽
AsyncTask瀹氫箟浜嗕笁绉嶆硾鍨嬬被鍨?Params锛孭rogress鍜孯esult銆?/p>
- Params 鍚姩浠诲姟鎵ц鐨勮緭鍏ュ弬鏁帮紝姣斿HTTP璇锋眰鐨刄RL銆?/li>
- Progress 鍚庡彴浠诲姟鎵ц鐨勭櫨鍒嗘瘮銆?/li>
- Result 鍚庡彴鎵ц浠诲姟鏈€缁堣繑鍥炵殑缁撴灉锛屾瘮濡係tring銆?/li>
浣跨敤杩嘇syncTask 鐨勫悓瀛﹂兘鐭ラ亾涓€涓紓姝ュ姞杞芥暟鎹渶灏戣閲嶅啓浠ヤ笅杩欎袱涓柟娉曪細
- doInBackground(Params鈥? 鍚庡彴鎵ц锛屾瘮杈冭€楁椂鐨勬搷浣滈兘鍙互鏀惧湪杩欓噷銆傛敞鎰忚繖閲屼笉鑳界洿鎺ユ搷浣淯I銆傛鏂规硶鍦ㄥ悗鍙扮嚎绋嬫墽琛岋紝瀹屾垚浠诲姟鐨勪富瑕佸伐浣滐紝閫氬父闇€瑕佽緝闀跨殑鏃堕棿銆傚湪鎵ц杩囩▼涓彲浠ヨ皟鐢╬ublicProgress(Progress鈥?鏉ユ洿鏂颁换鍔$殑杩涘害銆?/li>
- onPostExecute(Result)聽 鐩稿綋浜嶩andler 澶勭悊UI鐨勬柟寮忥紝鍦ㄨ繖閲岄潰鍙互浣跨敤鍦╠oInBackground 寰楀埌鐨勭粨鏋滃鐞嗘搷浣淯I銆?姝ゆ柟娉曞湪涓荤嚎绋嬫墽琛岋紝浠诲姟鎵ц鐨勭粨鏋滀綔涓烘鏂规硶鐨勫弬鏁拌繑鍥?/li>
鏈夊繀瑕佺殑璇濅綘杩樺緱閲嶅啓浠ヤ笅杩欎笁涓柟娉曪紝浣嗕笉鏄繀椤荤殑锛?/p>
- onProgressUpdate(Progress鈥?聽聽 鍙互浣跨敤杩涘害鏉″鍔犵敤鎴蜂綋楠屽害銆?姝ゆ柟娉曞湪涓荤嚎绋嬫墽琛岋紝鐢ㄤ簬鏄剧ず浠诲姟鎵ц鐨勮繘搴︺€?/li>
- onPreExecute()聽聽聽聽聽聽聽 杩欓噷鏄渶缁堢敤鎴疯皟鐢‥xcute鏃剁殑鎺ュ彛锛屽綋浠诲姟鎵ц涔嬪墠寮€濮嬭皟鐢ㄦ鏂规硶锛屽彲浠ュ湪杩欓噷鏄剧ず杩涘害瀵硅瘽妗嗐€?/li>
- onCancelled()聽聽聽聽聽聽聽聽聽聽聽聽 鐢ㄦ埛璋冪敤鍙栨秷鏃讹紝瑕佸仛鐨勬搷浣?/li>
浣跨敤AsyncTask绫伙紝浠ヤ笅鏄嚑鏉″繀椤婚伒瀹堢殑鍑嗗垯锛?/p>
- Task鐨勫疄渚嬪繀椤诲湪UI thread涓垱寤猴紱
- execute鏂规硶蹇呴』鍦║I thread涓皟鐢紱
- 涓嶈鎵嬪姩鐨勮皟鐢╫nPreExecute(), onPostExecute(Result)锛宒oInBackground(Params...), onProgressUpdate(Progress...)杩欏嚑涓柟娉曪紱
- 璇ask鍙兘琚墽琛屼竴娆★紝鍚﹀垯澶氭璋冪敤鏃跺皢浼氬嚭鐜板紓甯革紱
涓€涓秴绠€鍗曠殑鐞嗚В AsyncTask 鐨勪緥瀛愶細
1 锛?AsyncTask瀹炵幇鐨勫師鐞?鍜岄€傜敤鐨勪紭缂虹偣
AsyncTask,鏄痑ndroid鎻愪緵鐨勮交閲忕骇鐨勫紓姝ョ被,鍙互鐩存帴缁ф壙AsyncTask,鍦ㄧ被涓疄鐜板紓姝ユ搷浣?骞?/strong>鎻愪緵鎺ュ彛鍙嶉褰撳墠寮傛鎵ц鐨勭▼搴?/strong>(鍙互閫氳繃鎺ュ彛瀹炵幇UI杩涘害鏇存柊),鏈€鍚庡弽棣堟墽琛岀殑缁撴灉缁橴I涓荤嚎绋?
浣跨敤鐨勪紭鐐?
l聽 绠€鍗?蹇嵎
l聽 杩囩▼鍙帶
聽聽聽聽聽聽聽
浣跨敤鐨勭己鐐?/strong>:
l聽 鍦ㄤ娇鐢ㄥ涓紓姝ユ搷浣滃拰骞堕渶瑕佽繘琛孶i鍙樻洿鏃?灏卞彉寰楀鏉傝捣鏉?
2 锛塇andler寮傛瀹炵幇鐨勫師鐞嗗拰閫傜敤鐨勪紭缂虹偣
鍦℉andler 寮傛瀹炵幇鏃?娑夊強鍒?Handler, Looper, Message,Thread鍥涗釜瀵硅薄锛屽疄鐜板紓姝ョ殑娴佺▼鏄富绾跨▼鍚姩Thread锛堝瓙绾跨▼锛壝爐hread(瀛愮嚎绋?杩愯骞剁敓鎴怣essage-脿Looper鑾峰彇Message骞朵紶閫掔粰Handler脿Handler閫愪釜鑾峰彇Looper涓殑Message锛屽苟杩涜UI鍙樻洿銆?/p>
浣跨敤鐨勪紭鐐癸細
l聽 缁撴瀯娓呮櫚锛屽姛鑳藉畾涔夋槑纭?/p>
l聽 瀵逛簬澶氫釜鍚庡彴浠诲姟鏃讹紝绠€鍗曪紝娓呮櫚
聽 聽
浣跨敤鐨勭己鐐癸細
l聽 鍦ㄥ崟涓悗鍙板紓姝ュ鐞嗘椂锛屾樉寰椾唬鐮佽繃澶氾紝缁撴瀯杩囦簬澶嶆潅锛堢浉瀵规€э級
Android涓轰簡闄嶄綆杩欎釜寮€鍙戦毦搴︼紝鎻愪緵浜咥syncTask銆侫syncTask灏辨槸涓€涓皝瑁呰繃鐨勫悗鍙颁换鍔$被锛岄【鍚嶆€濅箟灏辨槸寮傛浠诲姟銆?/p>
AsyncTask鐩存帴缁ф壙浜嶰bject绫伙紝浣嶇疆涓篴ndroid.os.AsyncTask銆傝浣跨敤AsyncTask宸ヤ綔鎴戜滑瑕佹彁渚涗笁涓硾鍨嬪弬鏁帮紝骞堕噸杞藉嚑涓柟娉?鑷冲皯閲嶈浇涓€涓?銆?/p>
聽
AsyncTask瀹氫箟浜嗕笁绉嶆硾鍨嬬被鍨?Params锛孭rogress鍜孯esult銆?/p>
- Params 鍚姩浠诲姟鎵ц鐨勮緭鍏ュ弬鏁帮紝姣斿HTTP璇锋眰鐨刄RL銆?/li>
- Progress 鍚庡彴浠诲姟鎵ц鐨勭櫨鍒嗘瘮銆?/li>
- Result 鍚庡彴鎵ц浠诲姟鏈€缁堣繑鍥炵殑缁撴灉锛屾瘮濡係tring銆?/li>
浣跨敤杩嘇syncTask 鐨勫悓瀛﹂兘鐭ラ亾涓€涓紓姝ュ姞杞芥暟鎹渶灏戣閲嶅啓浠ヤ笅杩欎袱涓柟娉曪細
- doInBackground(Params鈥? 鍚庡彴鎵ц锛屾瘮杈冭€楁椂鐨勬搷浣滈兘鍙互鏀惧湪杩欓噷銆傛敞鎰忚繖閲屼笉鑳界洿鎺ユ搷浣淯I銆傛鏂规硶鍦ㄥ悗鍙扮嚎绋嬫墽琛岋紝瀹屾垚浠诲姟鐨勪富瑕佸伐浣滐紝閫氬父闇€瑕佽緝闀跨殑鏃堕棿銆傚湪鎵ц杩囩▼涓彲浠ヨ皟鐢╬ublicProgress(Progress鈥?鏉ユ洿鏂颁换鍔$殑杩涘害銆?/li>
- onPostExecute(Result)聽 鐩稿綋浜嶩andler 澶勭悊UI鐨勬柟寮忥紝鍦ㄨ繖閲岄潰鍙互浣跨敤鍦╠oInBackground 寰楀埌鐨勭粨鏋滃鐞嗘搷浣淯I銆?姝ゆ柟娉曞湪涓荤嚎绋嬫墽琛岋紝浠诲姟鎵ц鐨勭粨鏋滀綔涓烘鏂规硶鐨勫弬鏁拌繑鍥?/li>
鏈夊繀瑕佺殑璇濅綘杩樺緱閲嶅啓浠ヤ笅杩欎笁涓柟娉曪紝浣嗕笉鏄繀椤荤殑锛?/p>
- onProgressUpdate(Progress鈥?聽聽 鍙互浣跨敤杩涘害鏉″鍔犵敤鎴蜂綋楠屽害銆?姝ゆ柟娉曞湪涓荤嚎绋嬫墽琛岋紝鐢ㄤ簬鏄剧ず浠诲姟鎵ц鐨勮繘搴︺€?/li>
- onPreExecute()聽聽聽聽聽聽聽 杩欓噷鏄渶缁堢敤鎴疯皟鐢‥xcute鏃剁殑鎺ュ彛锛屽綋浠诲姟鎵ц涔嬪墠寮€濮嬭皟鐢ㄦ鏂规硶锛屽彲浠ュ湪杩欓噷鏄剧ず杩涘害瀵硅瘽妗嗐€?/li>
- onCancelled()聽聽聽聽聽聽聽聽聽聽聽聽 鐢ㄦ埛璋冪敤鍙栨秷鏃讹紝瑕佸仛鐨勬搷浣?/li>
浣跨敤AsyncTask绫伙紝浠ヤ笅鏄嚑鏉″繀椤婚伒瀹堢殑鍑嗗垯锛?/p>
- Task鐨勫疄渚嬪繀椤诲湪UI thread涓垱寤猴紱
- execute鏂规硶蹇呴』鍦║I thread涓皟鐢紱
- 涓嶈鎵嬪姩鐨勮皟鐢╫nPreExecute(), onPostExecute(Result)锛宒oInBackground(Params...), onProgressUpdate(Progress...)杩欏嚑涓柟娉曪紱
- 璇ask鍙兘琚墽琛屼竴娆★紝鍚﹀垯澶氭璋冪敤鏃跺皢浼氬嚭鐜板紓甯革紱
涓€涓秴绠€鍗曠殑鐞嗚В AsyncTask 鐨勪緥瀛愶細
import android.os.AsyncTask;聽聽聽聽
import android.widget.ProgressBar;聽聽聽聽
import android.widget.TextView;聽聽聽聽
聽聽聽聽
/**聽聽聽
聽* 鐢熸垚璇ョ被鐨勫璞★紝骞惰皟鐢╡xecute鏂规硶涔嬪悗聽聽聽
聽* 棣栧厛鎵ц鐨勬槸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;聽聽聽聽
聽聽聽 }聽聽聽聽
聽聽聽聽
聽聽聽聽
聽聽聽 /**聽聽聽
聽聽聽聽 * 杩欓噷鐨処nteger鍙傛暟瀵瑰簲AsyncTask涓殑绗竴涓弬鏁奥犅犅犅?
聽聽聽聽 * 杩欓噷鐨凷tring杩斿洖鍊煎搴擜syncTask鐨勭涓変釜鍙傛暟聽聽聽
聽聽聽聽 * 璇ユ柟娉曞苟涓嶈繍琛屽湪UI绾跨▼褰撲腑锛屼富瑕佺敤浜庡紓姝ユ搷浣滐紝鎵€鏈夊湪璇ユ柟娉曚腑涓嶈兘瀵筓I褰撲腑鐨勭┖闂磋繘琛岃缃拰淇敼聽聽聽
聽聽聽聽 * 浣嗘槸鍙互璋冪敤publishProgress鏂规硶瑙﹀彂onProgressUpdate瀵筓I杩涜鎿嶄綔聽聽聽
聽聽聽聽 */聽聽聽聽
聽聽聽 @Override聽聽聽聽
聽聽聽 protected String doInBackground(Integer... params) {聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽 int i = 0;聽聽聽聽
聽聽聽聽聽聽聽 for (i = 10; i <= 100; i+=10) {聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 //聽Thread.sleep(1000);
聽聽聽聽聽聽聽聽聽聽聽 publishProgress(i);聽聽聽聽
聽聽聽聽聽聽聽 }聽聽聽聽
聽聽聽聽聽聽聽 return i + params[0].intValue() + "";聽聽聽聽
聽聽聽 }聽聽聽聽聽
聽聽聽聽聽
聽聽聽 /**聽聽聽
聽聽聽聽 * 杩欓噷鐨凷tring鍙傛暟瀵瑰簲AsyncTask涓殑绗笁涓弬鏁帮紙涔熷氨鏄帴鏀禿oInBackground鐨勮繑鍥炲€硷級聽聽聽
聽聽聽聽 * 鍦╠oInBackground鏂规硶鎵ц缁撴潫涔嬪悗鍦ㄨ繍琛岋紝骞朵笖杩愯鍦║I绾跨▼褰撲腑 鍙互瀵筓I绌洪棿杩涜璁剧疆聽聽聽
聽聽聽聽 */聽聽聽聽
聽聽聽 @Override聽聽聽聽
聽聽聽 protected void onPostExecute(String result) {聽聽聽聽
聽聽聽聽聽聽聽 textView.setText("寮傛鎿嶄綔鎵ц缁撴潫" + result);聽聽聽聽
聽聽聽 }聽聽聽聽聽
聽聽聽聽聽聽 //璇ユ柟娉曡繍琛屽湪UI绾跨▼褰撲腑,骞朵笖杩愯鍦║I绾跨▼褰撲腑 鍙互瀵筓I绌洪棿杩涜璁剧疆聽聽聽聽
聽聽聽 @Override聽聽聽聽
聽聽聽 protected void onPreExecute() {聽聽聽聽
聽聽聽聽聽聽聽 textView.setText("寮€濮嬫墽琛屽紓姝ョ嚎绋?);聽聽聽聽
聽聽聽 }聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽
聽聽聽 /**聽聽聽
聽聽聽聽 * 杩欓噷鐨処ntege鍙傛暟瀵瑰簲AsyncTask涓殑绗簩涓弬鏁奥犅犅?
聽聽聽聽 * 鍦╠oInBackground鏂规硶褰撲腑锛岋紝姣忔璋冪敤publishProgress鏂规硶閮戒細瑙﹀彂onProgressUpdate鎵ц聽聽聽
聽聽聽聽 * onProgressUpdate鏄湪UI绾跨▼涓墽琛岋紝鎵€鏈夊彲浠ュUI绌洪棿杩涜鎿嶄綔聽聽聽
聽聽聽聽 */聽聽聽聽
聽聽聽 @Override聽聽聽聽
聽聽聽 protected void onProgressUpdate(Integer... values) {聽聽聽聽
聽聽聽聽聽聽聽 int vlaue = values[0];聽聽聽聽
聽聽聽聽聽聽聽 progressBar.setProgress(vlaue);聽聽聽聽
聽聽聽 }聽聽聽聽
}
- 1ScrollView里嵌套ListView,怎么禁用ListView的滚动事件,或者触发ListView滚动时调用父元素ScrollView的滚动事件
- 2Android快速开发必不可少的11个工具类
- 3android 语言定做
- 4(原)Android理论梳理-No1异步处理之Handler相干机制
- 5Android学习笔记19:含有通知栏的进度条的Android下载文件
- 6listview 动态添加,该如何解决
- 7Android带明白按钮的EditText
- 8eclipse中怎么修改项目名称 具体操作
- 9FBReaderJ学习笔记(3):Footer底部状态栏更改
- 10android GPS 获取定位坐标信息解决方法