我真的不明白发生了什么,也许你可以给我一个想法。我使用 getInstalledPackages() 来获取所有用户安装的应用程序及其权限的列表。这是我的做法:
private PackageManager pm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pm = getPackageManager();
getListData();
}
private void getListData()
{
backTask = new BackTask();
backTask.execute();
}
protected class BackTask extends AsyncTask<Context, String, ArrayList<App>>
{
....
@Override
protected ArrayList<App> doInBackground(Context... param)
{
try {
//get a list of installed apps.
List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_PROVIDERS);
for (PackageInfo packageInfo : packages) {
ApplicationInfo application = packageInfo.applicationInfo;
....
}
我需要根据用户交互刷新显示的列表。问题出现在 AsyncTask 的这一行:
List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_PROVIDERS);
有时包包含所有已安装的应用程序有时是空的。例如,在 3 次中,第 3 次是空的。将此代码从 AsyncTask 中取出并将其放在 getListData() 上每次都可以正常工作,没有任何问题。问题是我有点冻结,因为操作不在后台线程上。那么与 AsyncTask 有什么关系呢?难道我做错了什么 ?