Packagemanager.getInstalledPackages () إرجاع قائمة فارغة
-
27-09-2019 - |
سؤال
أنا أواجه موقفًا غريبًا جدًا عند استخدام طريقة packagemanager.getInstalledPackages (). في المرة الأولى التي أقوم فيها بتشغيل نشاطي ، أحصل على قائمة صالحة بجميع الحزم المثبتة. لكن في المرة الثانية التي أطلق فيها نشاطي ، أحصل على قائمة فارغة ... ما الذي يمكن أن يسبب هذا؟
أنا أستخدم هذا الرمز للحصول على القائمة: قائمة pkglist = getPackagemanager (). getInstalledPackages (packagemanager.get_activities) ؛
أنا أبني ضد 1.6 SDK مع التوافق بين 1.5+
شكرًا مقدمًا على أي اقتراحات/مساعدة ... أنا محير حقًا فيما يتعلق بالسبب ولا يمكنني التفكير في ما أفعله خطأ.
المحلول
ربما PackageManager
يحتاج إلى التذرع في مؤشر ترابط التطبيق الرئيسي ، لسبب ما. لم أحاول استخدامه من AsyncTask
.
تحديث 2018-03-26: PackageManager
عمومًا على ما يرام للاستدعاء على خيوط الخلفية ، getInstalledPackages()
خاصه.
نصائح أخرى
يمكنك الحصول على قائمة فارغة ، لأن Packagemanager توفي ، لأن المخزن المؤقت IPC المستخدم لإرجاع قائمة التطبيقات المثبتة نمت أكبر من حجم المخزن المؤقت 1 ميجابايت (اعتبارًا من 4.4).
منذ API 15 ، فإن نفس السلوك سوف يرمي أ TransactionTooLargeException
. على <15 واجهات برمجة التطبيقات ، يتم إرجاع قائمة فارغة فقط وأحيانًا يكون هناك خطأ صغير في logcats.
getInstalledPackages()
لا يلزم تنفيذها على موضوع واجهة المستخدم. قد يبدو بهذه الطريقة ، لكن هذا سيكون عرضيًا. إذا قمت بتنفيذها فقط على الخيط الرئيسي ، فلديك التأثير الجانبي الذي يمنع المكالمات المتزامنة التي يمكن أن تملأ المخزن المؤقت لعمليات IPC المشتركة على مستوى العملية.