簡體   English   中英

進度對話框異步任務花費比預期更長的時間

[英]Progress dialog async task taking longer time than expected

我是android編程的新手。 我正在開發一個Web搜尋器,為此我正在使用異步任務,並且它運行良好。為了使用戶了解情況,我正在使用進度對話框 我的問題是,如果我使用進度對話框,則我的程序需要花費更多的時間來執行,而當我不使用進度對話框時,它的執行速度會更快。

完成工作OnCreate方法

 protected void onCreate(Bundle savedInstanceState) {
    try {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results);

        Intent intent = getIntent();

        s1 = intent.getStringExtra("Number1");
        s2 = intent.getStringExtra("Number2");
        s3=intent.getIntExtra("selectedItem",0);
        HttpAsyncTask asyncTask = new HttpAsyncTask();
        asyncTask.execute();


    }catch (Exception e)
    {
        messageBox("Exception",e.getMessage());
    }

}

異步任務類

 private class HttpAsyncTask extends AsyncTask<List<String>, Integer, List<String>> {
    private ProgressDialog dialog;
    @Override
    protected void onPreExecute() 
     {
        dialog = new ProgressDialog(Results.this);
        dialog.setIndeterminate(true);
        dialog.setMessage("Please Wait");
        dialog.setCancelable(true);
        dialog.show();
        super.onPreExecute();
    }
    @Override
    protected List<String> doInBackground(List<String>... urls) {
        //android.os.Debug.waitForDebugger();
       // spinner.setVisibility(View.VISIBLE);
        List<String>resultList=new ArrayList<String>();
        try
        {
            if(isCancelled())
                return resultList;

         resultList=WebCrawlerClass.GetPost(s1,s2,s3);

        }catch (Exception e)
            {
                messageBoxs("Error", e.getMessage());
            }
       return resultList;
    }


    // onPostExecute displays the results of the AsyncTask.
    @Override
    protected void onPostExecute(List<String> result)
    {

    if(dialog.isShowing())
    {
     dialog.dismiss();
    }
        if(s3 == 2)
        {
            docListAdapter=new ListViewData(Results.this,result);
        }
        else {
            docListAdapter = new NameNumListData(Results.this, result);
        }

        docList=(ListView)findViewById(R.id.listView2);
        docList.setAdapter(docListAdapter);
        super.onPostExecute(result);
    }

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

我想念什么嗎? 需要幫忙..

謝謝和問候,Abhinav

在你的活動中

//啟動進度對話框..

Handler handler = new Handler() {
      @Override
       public void handleMessage(Message msg) {
       super.handleMessage(msg);
         // dismiss the progress dialog
      }
    };
 HttpAsyncTask asyncTask = new HttpAsyncTask(handler);
 asyncTask.execute();

在您的asynctask類中

private class HttpAsyncTask extends AsyncTask<List<String>, Integer, List<String>> {

    private Handler handler = null;
    public HttpAsyncTask (Handler handler) {
        this.handler = handler;
    }

    protected Void doInBackground(Void... params) {
       //Perform your task
       // When you know that task is finished , fire following code
                if (null != handler) {
                  Message message = handler.obtainMessage();
                        message.obj = Any data you want to sent to the activity
                        message.what = 1 ; ( Optional )
                        handler.sendMessage(message);
                }

    }

因此,當從doInbackground調用sendMessage函數時。您的活動中的handleMessage將被觸發,然后您應該關閉進度對話框

希望這將改善您所面臨的性能問題

刪除super.onPreExecute(); 在onPreExecute()方法中並檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM