摘要:注意每次需一個(gè)實(shí)例新建的任務(wù)只能執(zhí)行一次否則會(huì)出現(xiàn)異常取消一個(gè)正在執(zhí)行的任務(wù)方法將會(huì)被調(diào)用方法用于在執(zhí)行后臺(tái)任務(wù)前做一些操作方法內(nèi)部執(zhí)行后臺(tái)任務(wù)不可在此方法內(nèi)修改調(diào)用公布進(jìn)度最后方法將被執(zhí)行為了演示進(jìn)度休眠毫秒方法用于更新進(jìn)度信息方法用
private MyTask mTask; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); execute = (Button) findViewById(R.id.execute); execute.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //注意每次需new一個(gè)實(shí)例,新建的任務(wù)只能執(zhí)行一次,否則會(huì)出現(xiàn)異常 mTask = new MyTask(); mTask.execute("http://www.baidu.com"); execute.setEnabled(false); cancel.setEnabled(true); } }); cancel = (Button) findViewById(R.id.cancel); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //取消一個(gè)正在執(zhí)行的任務(wù),onCancelled方法將會(huì)被調(diào)用 mTask.cancel(true); } }); progressBar = (ProgressBar) findViewById(R.id.progress_bar); textView = (TextView) findViewById(R.id.text_view); } private class MyTask extends AsyncTask{ //onPreExecute方法用于在執(zhí)行后臺(tái)任務(wù)前做一些UI操作 @Override protected void onPreExecute() { Log.i(TAG, "onPreExecute() called"); textView.setText("loading..."); } //doInBackground方法內(nèi)部執(zhí)行后臺(tái)任務(wù),不可在此方法內(nèi)修改UI @Override protected String doInBackground(String... params) { Log.i(TAG, "doInBackground(Params... params) called"); try { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(params[0]); HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); long total = entity.getContentLength(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int count = 0; int length = -1; while ((length = is.read(buf)) != -1) { baos.write(buf, 0, length); count += length; //調(diào)用publishProgress公布進(jìn)度,最后onProgressUpdate方法將被執(zhí)行 publishProgress((int) ((count / (float) total) * 100)); //為了演示進(jìn)度,休眠500毫秒 Thread.sleep(500); } return new String(baos.toByteArray(), "gb2312"); } } catch (Exception e) { Log.e(TAG, e.getMessage()); } return null; } //onProgressUpdate方法用于更新進(jìn)度信息 @Override protected void onProgressUpdate(Integer... progresses) { Log.i(TAG, "onProgressUpdate(Progress... progresses) called"); progressBar.setProgress(progresses[0]); textView.setText("loading..." + progresses[0] + "%"); } //onPostExecute方法用于在執(zhí)行完后臺(tái)任務(wù)后更新UI,顯示結(jié)果 @Override protected void onPostExecute(String result) { Log.i(TAG, "onPostExecute(Result result) called"); textView.setText(result); execute.setEnabled(true); cancel.setEnabled(false); } //onCancelled方法用于在取消執(zhí)行中的任務(wù)時(shí)更改UI @Override protected void onCancelled() { Log.i(TAG, "onCancelled() called"); textView.setText("cancelled"); progressBar.setProgress(0); execute.setEnabled(true); cancel.setEnabled(false); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66126.html
摘要:再附一部分架構(gòu)面試視頻講解本文已被開源項(xiàng)目學(xué)習(xí)筆記總結(jié)移動(dòng)架構(gòu)視頻大廠面試真題項(xiàng)目實(shí)戰(zhàn)源碼收錄 Java反射(一)Java反射(二)Java反射(三)Java注解Java IO(一)Java IO(二)RandomAccessFileJava NIOJava異常詳解Java抽象類和接口的區(qū)別Java深拷貝和淺拷...
摘要:讓你收獲滿滿碼個(gè)蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個(gè)蛋從2017年02月20...
摘要:異步任務(wù)的構(gòu)造方法主要用于初始化線程池先關(guān)的成員變量創(chuàng)建一個(gè)新的異步任務(wù)。所以,我們是必須確保在銷毀活動(dòng)之前取消任務(wù)。 目錄介紹 01.先看下AsyncTask用法 02.AsyncTask源碼深入分析 2.1 構(gòu)造方法源碼分析 2.2 看execute(Params... params)方法 2.3 mWorker和mFuture的創(chuàng)建過程 03.異步機(jī)制的實(shí)現(xiàn) 04.不同...
摘要:在這里又調(diào)用我們發(fā)現(xiàn)在線程先調(diào)用了,將傳入的參數(shù)賦值給,然后調(diào)用了參數(shù)的方法,并且將作為參數(shù)傳入,這里就設(shè)計(jì)到了三個(gè)對(duì)象在中傳入,來看看它們的賦值在哪里我們發(fā)現(xiàn)的賦值默認(rèn)就是,也就是一個(gè)順序執(zhí)行的線程池,內(nèi)部實(shí)現(xiàn)有一個(gè)任務(wù)隊(duì)列。 在之前的文章深入探究了Handler,我們知道Android的消息機(jī)制主要靠Handler來實(shí)現(xiàn),但是在Handler的使用中,忽略內(nèi)存泄露的問題,不管是代碼...
閱讀 3149·2021-11-23 09:51
閱讀 2013·2021-09-09 09:32
閱讀 1107·2019-08-30 15:53
閱讀 2991·2019-08-30 11:19
閱讀 2499·2019-08-29 14:15
閱讀 1465·2019-08-29 13:52
閱讀 577·2019-08-29 12:46
閱讀 2854·2019-08-26 12:18