在我的Android应用程序中,我正在执行扩展AsyncTask的耗时任务,并希望在Toast消息中显示进度。吐司消息也显示在Pre()和onPost()上。
我可以在ToPre()和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 - Java AsyncTask通过publishProgress(progress)在UI上未显示进度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24234799/