在我的 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/