我是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);
    }
}


我想念什么吗?需要帮忙..

谢谢并恭祝安康,
阿比纳夫

最佳答案

在你的活动中

//启动进度对话框
..

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将被触发,然后您应该关闭进度对话框

希望这将改善您所面临的性能问题

关于java - 进度对话框异步任务花费比预期更长的时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28124150/

10-10 19:11