我正在获取要显示给用户的已安装非系统应用程序列表,我正在使用它来执行此操作:
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 and getInstalledPackages() fail 、 PackageManager.getInstalledPackages() returns empty list 、 Showing ProgressDialog during UI Thread operation in Android 并且我认为理解他们在说什么,但我在理解如何使其工作时遇到问题。我知道延迟来自 List list = pm.getInstalledApplications(PackageManager.GET_META_DATA);我知道 getInstalledApplications(PackageManager.GET_META_DATA);必须在主 UI 上运行,否则应用程序强制关闭。我如何继续保持 getInstalledApplications(PackageManager.GET_META_DATA);它需要在哪里,但在后台填充列表,这样应用程序就不会被卡住?预先感谢您的任何帮助。
更新代码以显示 Asynctask。我让代码在异步中运行,但现在它只在文本 View 而不是列表中显示一个结果。我知道它必须是一些简单的东西,我想让它发挥作用。
最佳答案
我会修改您的 doInBackground()
使其看起来像这样:
@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) {
//add all the application names to the same String.
label +=", " + (String) pm.getApplicationLabel(list.get(i));
Log.w("Installed Applications", list.get(i).packageName.toString());
}
}
return label;
}
因此,我想说您的
onPostExecute()
需要看起来像: @Override
protected void onPostExecute(String result) {
txtApplications.append(label);
}
}
从现在开始,
label
包含所有应用程序名称(因为 label += ...
);关于android - getInstalledApplications() 与 asynctask,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14227552/