成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

AsyncTask詳解

fnngj / 883人閱讀

摘要:注意每次需一個(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

相關(guān)文章

  • 四年來Android面試大綱,作為一個(gè)Android程序員

    摘要:再附一部分架構(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深拷貝和淺拷...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • 「碼個(gè)蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個(gè)蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個(gè)蛋從2017年02月20...

    wangtdgoodluck 評(píng)論0 收藏0
  • AsyncTask異步任務(wù)類

    摘要:異步任務(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.不同...

    dongxiawu 評(píng)論0 收藏0
  • AsyncTask異步任務(wù)

    摘要:在這里又調(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)存泄露的問題,不管是代碼...

    quietin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

fnngj

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<