我正在获取已安装的非系统应用程序列表以显示给用户,我正在使用它来执行此操作:
private class getApplications extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// perform long running operation operation
for (i = 0; i < list.size(); i++) {
if ((list.get(i).flags & ApplicationInfo.FLAG_SYSTEM) != 1) {
label = (String) pm.getApplicationLabel(list.get(i));
Log.w("Installed Applications", list.get(i).packageName.toString());
}
}
return label;
}
@Override
protected void onPostExecute(String result) {
txtApplications.append(label);
if (i!=list.size()-1) {
txtApplications.append(", ");
}
}
@Override
protected void onPreExecute() {
pm = getPackageManager();
list = pm.getInstalledApplications(PackageManager.GET_META_DATA);
}
};
只要它在主 UI 上就可以正常工作,但它会导致应用程序在加载时滞后。我已经阅读了这三个问题: AsyncTask 和 getInstalledPackages() 失败,PackageManager.getInstalledPackages() 返回空列表,Android 中 UI 线程操作期间显示 ProgressDialog我想明白他们在说什么,但我在理解如何让它发挥作用时遇到了问题。我知道延迟来自 List list = pm.getInstalledApplications(PackageManager.GET_META_DATA); 我知道 getInstalledApplications(PackageManager.GET_META_DATA); 必须在主 UI 上运行,否则应用程序强制关闭。我该如何保持 getInstalledApplications(PackageManager.GET_META_DATA); 它需要在哪里,但在后台填充列表,这样应用程序就不会被冻结?预先感谢您的任何帮助。
更新代码以显示 Asynctask。我让代码在异步中运行,但现在它只在文本视图中显示一个结果而不是列表。我知道它必须是一些我缺少的简单的东西才能让它工作。