AsyncTask y getInstalledPackages () fallan

Realmente no entiendo lo que está sucediendo y tal vez puedas darme una idea. Utilizo getInstalledPackages () para obtener una lista de todas las aplicaciones instaladas por el usuario y sus permisos. Así es como lo hago:

private PackageManager pm;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pm = getPackageManager();
        getListData();
}

 priv,ate 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;
....
}

Necesito actualizar la lista que se muestra en función de la interacción del usuario. El problema aparece en esta línea en AsyncTask:

List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_PROVIDERS);

A veces paquetes contiene todas las aplicaciones instaladas a veces está VACÍO. Digamos, por ejemplo, de 3 veces, la tercera vez está vacía. Sacar este código de AsyncTask y ponerlo en getListData () funciona cada vez sin ningún problema. El problema es que me congelo un poco porque la operación no está en un subproceso. Entonces, ¿cuál es el trato con AsyncTask? Estoy haciendo algo mal

Respuestas a la pregunta(3)

Su respuesta a la pregunta