2012-10-17 10 views
7

ich diese Zeilen in meinem Code haben:‚Uncaught geworfen Ausnahme von Finalizerthread‘ wenn MapActivity Öffnen

// create tab4 
intent = new Intent(this, ActWhereAmI.class) 
     .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
tabspecWhereAmI = tabHost 
     .newTabSpec("tab4") 
     .setIndicator(Utilities.prepareTabView(this,"where am I")) 
     .setContent(intent); 
tabHost.addTab(tabspecWhereAmI); 


public static View prepareTabView(Context context, String text) { 
     View view = LayoutInflater.from(context).inflate(
       R.layout.tab_indicator, null); 
     TextView tv = (TextView) view.findViewById(R.id.tabIndicatorTextView); 
     tv.setText(text); 

     return view; 
    } 

Wenn die Anwendung die Linie läuft tabHost.addTab(tabspecWhereAmI); ich folgende Fehlermeldung erhalten, nur in LogCat und das Programm läuft ohne Probleme :

10-17 13:38:01.164: W/MapActivity(4815): Recycling dispatcher android_maps_conflict_a[email protected]413c8658 
10-17 13:38:01.171: V/MapActivity(4815): Recycling map object. 
10-17 13:38:01.335: W/MapActivity(4815): Recycling dispatcher android_maps_conflict_a[email protected]413c8658 
10-17 13:38:01.335: V/MapActivity(4815): Recycling map object. 
10-17 13:38:01.554: D/dalvikvm(4815): GC_CONCURRENT freed 776K, 23% free 10286K/13255K, paused 2ms+7ms 
10-17 13:38:01.554: E/System(4815): Uncaught exception thrown by finalizer 
10-17 13:38:01.554: E/System(4815): java.lang.IllegalStateException: Binder has been finalized! 
10-17 13:38:01.554: E/System(4815):  at android.os.BinderProxy.transact(Native Method) 
10-17 13:38:01.554: E/System(4815):  at android.database.BulkCursorProxy.close(BulkCursorNative.java:288) 
10-17 13:38:01.554: E/System(4815):  at android.database.BulkCursorToCursorAdaptor.close(BulkCursorToCursorAdaptor.java:133) 
10-17 13:38:01.554: E/System(4815):  at android.database.CursorWrapper.close(CursorWrapper.java:49) 
10-17 13:38:01.554: E/System(4815):  at android.content.ContentResolver$CursorWrapperInner.close(ContentResolver.java:1591) 
10-17 13:38:01.554: E/System(4815):  at android.content.ContentResolver$CursorWrapperInner.finalize(ContentResolver.java:1604) 
10-17 13:38:01.554: E/System(4815):  at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182) 
10-17 13:38:01.554: E/System(4815):  at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168) 
10-17 13:38:01.554: E/System(4815):  at java.lang.Thread.run(Thread.java:856) 
10-17 13:38:01.554: E/System(4815): Uncaught exception thrown by finalizer 
10-17 13:38:01.554: E/System(4815): java.lang.IllegalStateException: Binder has been finalized! 
10-17 13:38:01.554: E/System(4815):  at android.os.BinderProxy.transact(Native Method) 
10-17 13:38:01.554: E/System(4815):  at android.database.BulkCursorProxy.close(BulkCursorNative.java:288) 
10-17 13:38:01.554: E/System(4815):  at android.database.BulkCursorToCursorAdaptor.close(BulkCursorToCursorAdaptor.java:133) 
10-17 13:38:01.554: E/System(4815):  at android.database.CursorWrapper.close(CursorWrapper.java:49) 
10-17 13:38:01.554: E/System(4815):  at android.content.ContentResolver$CursorWrapperInner.close(ContentResolver.java:1591) 
10-17 13:38:01.554: E/System(4815):  at android.content.ContentResolver$CursorWrapperInner.finalize(ContentResolver.java:1604) 
10-17 13:38:01.554: E/System(4815):  at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182) 
10-17 13:38:01.554: E/System(4815):  at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168) 
10-17 13:38:01.554: E/System(4815):  at java.lang.Thread.run(Thread.java:856) 

Diese Ausnahme tritt vor der onCreate(...) Methode von ActWhereAmI. Mein Problem ist dieser Frage ähnlich: Uncaught exception thrown by finalizer

Warum bekomme ich diesen Fehler und wie kann ich es lösen?

+0

Was ist der Körper der Methode 'Utilities.prepareTabView()'? – krtek

+0

ist deine Aktivität eine MapActivity? Vielleicht ist es mit der MapActivity verwandt, die Sie verwenden, die nicht mit dem Code verbunden ist, den Sie gepostet haben – nandeesh

+0

@nandeesh yesy es ist eine MapActivity. – breceivemail

Antwort

4

Machst du irgendetwas db-bezogen? Es hört sich fast so an, als würde entweder die Aktivität, die gerade erledigt wird, den Cursor geschlossen haben (manuell oder automatisch) und dann versucht, etwas in finalize() zu tun, oder der Cursor wird vom Android OS geschlossen.

In Fall 2 kann es bedeuten, dass Sie den Cursor möglicherweise manuell schließen müssen. Wenn dies der Fall ist, sollten Sie es erneut öffnen/schließen in onResume/onPause oder onStart/onStart

Eine andere Person erwähnt, dass dies möglicherweise der Fall ist, weil Sie versuchen, zwei von ihnen gleichzeitig zu öffnen

1

Dies steht in Zusammenhang mit Cursor in onStop() oder onDestroy(). Sie können es aufrufen, indem Sie closeTab() oder closeAllTabs() aufrufen.

Hoffe, das wird helfen.

1

Denken Sie daran, den Cursor zu schließen, sobald Sie mit dem Cursor fertig sind, bevor Sie eine andere Aktivität durchlaufen.

Verwandte Themen