Android 主活动中的异步任务如何显示进度日志
我在Mainactivty Oncreate()方法中有3个异步任务,当用户打开应用程序时,我希望在加载3个异步任务时显示进度对话框。 请指定从何处开始并取消“进程”对话框。 如果有任何样本,请提供一个链接。Android 主活动中的异步任务如何显示进度日志,android,android-asynctask,progressdialog,oncreate,Android,Android Asynctask,Progressdialog,Oncreate,我在Mainactivty Oncreate()方法中有3个异步任务,当用户打开应用程序时,我希望在加载3个异步任务时显示进度对话框。 请指定从何处开始并取消“进程”对话框。 如果有任何样本,请提供一个链接。 谢谢。您可以在第一个AsyncTask的onPreExecute方法中启动进度对话框,当为任何AsyncTask调用onPostExecute时,您可以检查其他AsyncTask是否完成,如果是,请关闭对话框,否则让它运行。 或者,您可以为每个异步任务启动一个单独的进度对话框,并在相应的异
谢谢。您可以在第一个AsyncTask的onPreExecute方法中启动进度对话框,当为任何AsyncTask调用onPostExecute时,您可以检查其他AsyncTask是否完成,如果是,请关闭对话框,否则让它运行。
或者,您可以为每个异步任务启动一个单独的进度对话框,并在相应的异步任务完成后关闭它们。您可以声明进度条。然后在onPreExecute中,显示progressbar。在doInBackground中,您可以计算进度值并调用publishProgress来显示进度值。在onPostExecute中,您可以关闭progressbar 您可以这样做:
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private ProgressDialog mProgressDialog;
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading data file..");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
private class DownloadZipFileTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... urls) {
Long progress;
calculate progress
publishProgress("" + progress);
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
publicstaticfinal int DIALOG\u DOWNLOAD\u PROGRESS=0;
private ProgressDialog mProgressDialog;
@凌驾
受保护的对话框onCreateDialog(int id){
开关(id){
案例对话框\u下载\u进度:
mProgressDialog=新建进度对话框(此);
setMessage(“下载数据文件…”);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_水平);
mProgressDialog.setCancelable(假);
mProgressDialog.show();
返回mProgressDialog;
违约:
返回null;
}
}
私有类DownloadZipFileTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
showDialog(对话框下载进度);
}
@凌驾
受保护的字符串doInBackground(字符串…URL){
长期进展;
计算进度
出版进度(“+”进度);
}
受保护的void onProgressUpdate(字符串…进度){
Log.d(“ANDRO_ASYNC”,progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@凌驾
受保护的void onPostExecute(字符串结果){
dismissDialog(对话框下载进度);
}
}
最好在第一个异步类中启动进度条,并使用相同的对象在最后一个异步类中关闭进度条。。。。剩下的留着吧
obj.dismiss();
这是您的ayncTask,并使用
new Async(您的_上下文)调用它代码>
希望它能对您有所帮助。事实上,您已经掌握了如何操作的代码。此外,我建议您在调用AsyncTask
之前必须创建并显示一个进度对话框。由于您有3个异步任务,所以若要从服务器获取某些内容,就无法确定最后一个任务是哪个。如果您有这种情况,则制作3个标志,如boolean task1、task2、task3
并在每个任务的onPostExecute
方法中,将各自的标志设置为true,并检查这些所有标志是否为true,如if(task1&&task2&&task3)progressDialog.disease()代码>。所以,对于最后一个任务,它将把它的标志设置为true,两个标志将已经设置为true,因此当条件为true时,它将关闭进度对话框。希望您能收到。您有什么代码可以提供给我们吗?到目前为止您做了什么?您可以在第一个异步任务执行前启动它,并在最后一个异步任务执行后关闭它。我认为不确定的进度条将是最好的解决方案。您可以使用进度条并在其中更新进度条onProgressUpdate
方法。干杯为什么三个不是一个?嗨。。如果这个答案帮助你解决了问题,请接受这个答案,这样其他人就可以知道正确的答案,线程也会变得更有用。谢谢你的回答,我也有同样的想法,我正在寻找其他解决方案。。
private class Async extends AsyncTask<String, String, Boolean>
{
Context context;
ProgressDialog pd;
Progress progress;
Async (Context mcontext)
{
context = mcontext;
pd = new ProgressDialog(activityContext);
progress = new Progress(context);
}
@Override
protected void onPreExecute()
{
pd.setTitle("Loading..");
pd.setMessage("Please Wait..");
pd.setCancelable(false);
pd.show();
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params)
{
return flag;
}
@Override
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
pd.setMessage("Please Wait..." + values[0].toString());
}
public class Progress
{
public ServerToApp task;
public Progress(ServerToApp task)
{
this.task = task;
}
public void publish(String value)
{
task.publishProgress(value);
}
}
@Override
protected void onPostExecute(Boolean result)
{
super.onPostExecute(result);
if(pd.isShowing()) pd.dismiss();
}
}
progress.publish(Values);