我真的不明白髮生了什麼,也許你可以給我一個主意。我使用getInstalledPackages()以獲取所有用戶安裝的應用程序及其權限的列表。下面是我該怎麼做:AsyncTask和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次,第三次是空的。從AsyncTask中取出這些代碼並將其放在getListData()上,每次都可以正常工作,沒有任何問題。問題是我得到了一點凍結,因爲操作不在後面的線程上。 那麼AsyncTask的處理是什麼?難道我做錯了什麼 ?
請檢查我的其他答案,我不認爲它需要在UI線程上執行,請參閱:http://stackoverflow.com/questions/3455781/packagemanager-getinstalledpackages-returns-empty-list – darken