最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android教程之使用asynctask在后臺運行耗時任務(wù)

 更新時間:2014年02月14日 12:53:06   作者:  
AsyncTask用在需要在ui線程中調(diào)用、在背景線程中執(zhí)行耗時任務(wù)、并且在ui線程中返回結(jié)果的場合。下面就是一個在背景中運行的AsyncTask的實現(xiàn)DownloadDBTask

, Android中實現(xiàn)了默認的進度提示對話框,即ProgressDialog,通過實例化和一些簡單設(shè)置,就可以使用了。

復(fù)制代碼 代碼如下:

private class DownloadDBTask extends AsyncTask<String, Integer, String> {  
        // 可變長的輸入?yún)?shù),與AsyncTask.exucute()對應(yīng)  
        ProgressDialog pdialog;  
        public DownloadDBTask(Context context){  
            pdialog = new ProgressDialog(context, 0);     
            pdialog.setButton("取消", new DialogInterface.OnClickListener() {  
             public void onClick(DialogInterface dialog, int i) {  
              dialog.cancel();  
             }  
            });  
            pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {  
             public void onCancel(DialogInterface dialog) {  
              finish();  
             }  
            });
            pdialog.setTitle("第一次使用,正在下載數(shù)據(jù)...");
            pdialog.setCancelable(true);  
            pdialog.setMax(100);  
            pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
            pdialog.show();  
        }

        @Override 
        protected String doInBackground(String... params) {  
            try{
                    if (DataOper.GetTopNearestPOIs(1, mDBHelper).size()==0)
                            DataOper.GetAllPtsFromNet(mDBHelper, pdialog); // 從網(wǎng)絡(luò)上下載數(shù)據(jù)記錄的功能
            } catch(Exception e) {  
                    e.printStackTrace();
            }  
            return null;
        }

        @Override 
        protected void onCancelled() {  
            super.onCancelled();  
        }  

        @Override 
        protected void onPostExecute(String result) {  
            pdialog.dismiss();   
        }  

        @Override 
        protected void onPreExecute() {
        }  

        @Override 
        protected void onProgressUpdate(Integer... values) {   
        } 
     }  

對于寫好的異步任務(wù)類,調(diào)用方法為:

復(fù)制代碼 代碼如下:

DownloadDBTask task = new DownloadDBTask(context);  
task.execute("");

注意AsyncTask為泛型類,具有三個泛型參數(shù),此處設(shè)計為 <String, Integer, String>,對應(yīng)于運行參數(shù)、進度值類型和返回參數(shù)。
從sdk的文檔中看到,當(dāng)一個AsyncTask運行的過程中,經(jīng)歷了4個步驟:

1、onPreExecute(), 在excute調(diào)用后立即在ui線程中執(zhí)行。 This step is normally used to setup the task, for instance by showing a progress bar in the user interface.
2、doInBackground, 當(dāng) onPreExecute() 完成后, 立即在后臺線程中運行. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use publishProgress to publish one or more units of progress. These values are published on the UI thread, in the onProgressUpdate step.
3、onProgressUpdate, 在調(diào)用publishProgress后,在ui線程中運行. The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field.
4、onPostExecute, 后臺運算完成時在ui線程中調(diào)用. The result of the background computation is passed to this step as a parameter.

相關(guān)文章

最新評論

枣强县| 清河县| 太康县| 通城县| 瑞昌市| 龙陵县| 黔西县| 襄城县| 通州区| 稻城县| 广平县| 武冈市| 天津市| 镇康县| 林甸县| 建水县| 齐齐哈尔市| 龙井市| 观塘区| 繁昌县| 融水| 青神县| 平舆县| 衡阳市| 城步| 哈尔滨市| 杂多县| 马尔康县| 和平区| 永和县| 虹口区| 淮阳县| 崇阳县| 潼南县| 措勤县| 盘山县| 枣庄市| 新郑市| 犍为县| 东阿县| 枣庄市|