正如我在另一个问题HERE上提出的问题,似乎PackageManager.getInstalledPackages()并不适合使用线程。正如CommonsWare所说HERE:
可能需要在主应用程序上调用PackageManager 线程,由于某种原因
因此,在线程上使用它会产生不良行为,在我的Activity中进入和退出几次会使显示的应用列表有时带有项目,有时是空的。让UI Thread中的所有东西都像梦一样,每次都很好。问题是,用户需要某种反馈,我需要提供一种反馈。当我开始活动时,屏幕保持黑色3-4-5-6秒(取决于安装的设备和应用程序)。我怎样才能提供某种反馈?我正在考虑一个ProgressDialog,但我不知道如何开始它。谢谢。
答案 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();
}
}
}
}