2013-04-02 10 views
13
starb

Ich bekam Post von einem Benutzer, der eine Menge von Anwendungen installiert ist, dass er Probleme hat, wenn meine app Aktivität info mit diesem Code sammelt:Package Manager hat

getPackageManager().queryIntentActivities(mAinIntent, 0) 

ganze Quelle hier: https://github.com/ligi/FAST

das ist, was

Caused by: java.lang.RuntimeException: Package manager has died 
at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:479) 
at org.ligi.fast.BaseAppGatherAsyncTask.doInBackground(BaseAppGatherAsyncTask.java:34) 
at org.ligi.fast.BaseAppGatherAsyncTask.doInBackground(BaseAppGatherAsyncTask.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:287) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
... 5 more 
Caused by: android.os.TransactionTooLargeExceptionTransactionTooLargeException 
at android.os.BinderProxy.transact(Native Method) 
at android.content.pm.IPackageManager$Stub$Proxy.queryIntentActivities(IPackageManager.java:2230) 
at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:473) 
... 9 more 
Log: 
0 D: Writing unhandled exception to: /data/data/org.ligi.fast/files/3.7-1364933885194.tracedroid 

es passiert, scheint ein Problem zu sein, dass ich gegen die 1MB Grenze leite, aber wie von dort zu bekommen? Wie kann ich sonst die benötigten Informationen bekommen? Gibt es eine Möglichkeit, die Daten aufzuteilen?

+1

Ist das ein Tippfehler 'TransactionTooLargeExceptionTransactionTooLargeException'? [Siehe hierzu] (http://developer.android.com/reference/android/os/TransactionTooLargeException.html) * Der Binder-Transaktionspuffer hat eine begrenzte feste Größe (derzeit 1 MB), die von allen laufenden Transaktionen für den Prozess gemeinsam genutzt wird . Folglich kann diese Ausnahme ausgelöst werden, wenn viele Transaktionen in Bearbeitung sind, auch wenn die meisten einzelnen Transaktionen eine moderate Größe haben. * – t0mm13b

+0

'AppInfo' class,' private BitmapDrawable icon; "... essen sie zu viel Gedächtnis? Warum gibst du mehrere Kopien von 'Contexts' aus der AsyncTask? – t0mm13b

+0

ja - scheint ein c & p'o zu sein - keine Ahnung wie sich das verdoppelte. Sehen Sie eine Problemumgehung für das Problem? – ligi

Antwort

5

Ich lief diesen Fehler vor einiger Zeit mit der gleichen Benutzereingabe. Obwohl mein geworfenes Ereignis anders war. Ich habe die Ausnahme abgefangen und den Benutzer anmutig zurückgemeldet, dass zu viele Apps installiert waren, die mit dieser Funktion umgehen konnten. Von mehreren hunderttausend Installationen habe ich diesen Fehler nur fünfmal für ein Projekt gesehen. Ich weiß, dass das keine Entschuldigung ist, aber einige Geräte haben einfach nicht den Haufen, um die Intents jeder installierten Anwendung zu verarbeiten auf dem Gerät.

Verwandte Themen