何が起きているのか分かりません。私は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);
時にはパッケージは時にインストールされているすべてのアプリケーションが含まれていEMPTYです。例えば、3回のうち3回目が空であるとします。このコードをAsyncTaskから取り出してgetListData()に置くと、毎回問題なく動作します。問題は、操作がバックスレッドではないため、少しフリーズしてしまうことです。 AsyncTaskとは何ですか?私は何か間違っているのですか?
私の他の答えを確認してください、私はそれがUIスレッドで実行する必要はないと思う:http://stackoverflow.com/questions/3455781/packagemanager-getinstalledpackages-returns-empty-list – darken