如何在 Android 中开始活动之前显示进度对话框?

Posted

技术标签:

【中文标题】如何在 Android 中开始活动之前显示进度对话框?【英文标题】:How to display progress dialog before starting an activity in Android? 【发布时间】:2011-07-09 07:10:14 【问题描述】:

如何在 android 中启动 Activity 之前(即,当 Activity 正在加载一些数据时)显示进度对话框?

【问题讨论】:

你应该删除你的问题之前的空格......它被作为代码块拾取并使你的问题更难阅读。 【参考方案1】:

您应该在AsyncTask 中加载数据,并在数据加载完成后更新您的界面。

您甚至可以在 AsyncTask 的 onPostExecute() 方法中启动一个新活动。

更具体地说,您将需要一个扩展 AsyncTask 的新类:

public class MyTask extends AsyncTask<Void, Void, Void> 
  public MyTask(ProgressDialog progress) 
    this.progress = progress;
  

  public void onPreExecute() 
    progress.show();
  

  public void doInBackground(Void... unused) 
    ... do your loading here ...
  

  public void onPostExecute(Void unused) 
    progress.dismiss();
  

那么在你的活动中你会做:

ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("Loading...");
new MyTask(progress).execute();

【讨论】:

嘿,谢谢你的回答,我就是这样做的,但是由于某种原因,当手机处于横向而不是纵向时,progressDialog 会弹出。你对此有什么想法吗?我已经尝试从第一堂课(调用 myTask 的那个)开始对话框,但仍然是同样的问题。有时,对话框在纵向模式下工作,但看起来没有焦点,这种情况在 10 次尝试中只会发生一次。【参考方案2】:

当您在 Android 上启动一个长时间运行的进程时,始终建议您在另一个线程上执行此操作。然后,您可以使用 UI 线程来显示进度对话框。您不能在进程正在运行的同一 (UI) 线程中显示进度对话框。

执行以下操作以开始您的流程

pd = ProgressDialog.show(this, "Synchronizing data", "Please wait...");
Thread t = new Thread(this);
t.start();

为此,您的活动应按如下方式实现 Runnable

public class SyncDataActivity extends Activity implements Runnable

最后是一种执行长时间运行过程的方法

@Override
public void run() 
      //your code here

【讨论】:

如果您使用线程,您必须管理各种事情,例如在 UI 线程上执行任务后代码。 Matthew... 你能在 AsyncTask 中将 Daemon 设置为 true 吗? 嗨,我按照你们所说的尝试过,但仍然无法正常工作。我在下面发布我的代码。谁能告诉我做错了什么? public class Startup extends Activity implements Runnable private ProgressDialog pd @Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);设置内容视图(R.layout.startup);新的 MyTask(pd).execute(); 私有类 MyTask 扩展 AsyncTask 私有 ProgressDialog 进度; public MyTask(ProgressDialog 进度) this.progress = progress; protected void onPreExecute() progress = ProgressDialog.show(Startup.this, "", "Loading. Please wait...", true); @Override protected Void doInBackground(Void... arg0) //执行某些方法返回null; @Override protected void onPostExecute(Void result) progress.dismiss();

以上是关于如何在 Android 中开始活动之前显示进度对话框?的主要内容,如果未能解决你的问题,请参考以下文章

Android Java如何从服务中消除进度问题

如何在非活动类中显示进度对话框

进度对话框和后台线程处于活动状态时如何处理屏幕方向更改?

进度对话框和后台线程处于活动状态时如何处理屏幕方向更改?

如何在颤动中加载数据之前显示进度对话框?

进度对话框不必要的显示