Java AsyncTask 虽然publishProgress(progress)没有在UI上显示进度

标签 java android multithreading android-asynctask

在我的 Android 应用程序中,我正在执行扩展 AsyncTask 的耗时任务,并希望在 Toast 消息中显示进度。 Toast 消息也会显示在 onPre() 和 onPost() 上。

我能够在 onPre() 和 onPost() 上显示 Toast 消息,但无法显示 onProgressUpdate(Integer...progress)。

以下是我的代码...

public class MainClass extends Activity {


    public void Start(View view) {
         DemoTasks runner = new DemoTasks(this);

         runner.execute("Start");   
    }

    private class DemoTasks extends  AsyncTask<String, Integer, Integer> {

        private Context context;

        public DemoTasks(Context context){
                this.context = context;
        }

        @Override
        protected Integer doInBackground(String... params) {
        try {

            publishProgress(0);

            doWork();
            Thread.sleep(5000L);

            publishProgress(100);

        } catch (Exception localException) {
            Log.d("POST", localException.getMessage());
        }


        return 100;
    } 


    @Override
      protected void onPostExecute(Integer result) {
        Toast.makeText(context, "post", Toast.LENGTH_SHORT).show();
      }


      @Override
      protected void onPreExecute() {
          Toast.makeText(context, "pre", Toast.LENGTH_SHORT).show();
      }


      @Override
      protected void onProgressUpdate(Integer... progress) {           
          super.onProgressUpdate(progress);
          Toast.makeText(context, "progress-" + progress, Toast.LENGTH_SHORT).show();
      }


   }

  }

也在我的 doInBackgroud(String...params) ...Thread.sleep 中也不起作用。 一旦 onPre() 执行,onPost() 也会执行!!!!

最佳答案

你可以试试这个,

showProgress ();
new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        dialog.cancel();
        Intent i=new Intent(getApplicationContext(),Main.class);
        startActivity(i);
        finish();

    }
}, 3000); //number of seconds

private ProgressDialog dialog;
     public  void showProgress () {
        dialog = new ProgressDialog(this);
        dialog.setCancelable(true);
        dialog.setMessage("Please wait");
        dialog.show();}

基本上,您可以通过任何方法访问 UI,甚至在 doinBackground 中您也可以使用 runOnUIthread 访问 UI。

关于Java AsyncTask 虽然publishProgress(progress)没有在UI上显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234799/

相关文章:

Java 字段从方法返回后有错误的值,而使用 void 方法计算它会产生正确的结果

android - 为多选列表首选项选择默认值

android - map 不显示?

java - 试图理解同步队列的机制

java - 创建 JTable 的 Junit 测试是否良好?

java - Eclipse:设置自动格式化的最大行长对吗?

java - 简单日期格式 ("yyyy-MM-dd' T'HH :mm:ssZ") parse in java gives wrong date?

php - Laravel 推送通知

c - 更好地理解并发(带锁)

c - 使用 pthread 创建多个线程时出现问题