在Android中的UI线程操作期间显示ProgressDialog

时间:2011-11-14 12:21:53

标签: android multithreading android-asynctask progressdialog

正如我在另一个问题HERE上提出的问题,似乎PackageManager.getInstalledPackages()并不适合使用线程。正如CommonsWare所说HERE:

  

可能需要在主应用程序上调用PackageManager   线程,由于某种原因

因此,在线程上使用它会产生不良行为,在我的Activity中进入和退出几次会使显示的应用列表有时带有项目,有时是空的。让UI Thread中的所有东西都像梦一样,每次都很好。问题是,用户需要某种反馈,我需要提供一种反馈。当我开始活动时,屏幕保持黑色3-4-5-6秒(取决于安装的设备和应用程序)。我怎样才能提供某种反馈?我正在考虑一个ProgressDialog,但我不知道如何开始它。谢谢。

3 个答案:

答案 0 :(得分:1)

正如所发现的,与调用PackageManager.getInstalledPackages()(必须在UI线程上完成)相比,处理应用程序的循环需要一段时间(可以在单独的线程中完成)。

答案 1 :(得分:0)

在活动的onCreate()中尝试使用以下ProgressDialog

this.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
ProgressDialog LoadingDialog = ProgressDialog.show(this, "", "Loading..", true);

然后在导致延迟的过程结束时将其解除

LoadingDialog.dismiss();

答案 2 :(得分:0)

使用Async进行后台工作并在加载数据时显示指示符。

你onCreate()。致电new AsyncCommonDataFetcher(this).execute();

public class AsyncCommonDataFetcher extends AsyncTask<Void, Void, Void> {

    Context mContext = null;
    private ProgressDialog mProgressIndicator = null;

    public AsyncCommonDataFetcher(Context ctx) {
        mContext = ctx;
    }

protected void onPreExecute() {
        mProgressIndicator = ProgressDialog.show(((Activity) mContext), null,
                    "Please wait", true);

    }
    @Override
    protected Void doInBackground(Void... voids) {
        // Do what ever work you like to do. It will do this in backgound and show user a indicator to wait.
    }

    @Override
    protected void onPostExecute(Void voidInstance) {


            try {
                if (mProgressIndicator != null) {
                    mProgressIndicator.hide();
                    mProgressIndicator.dismiss();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }

    }
}