打开MapActivity时,“终结器抛出未捕获的异常”

时间:2012-10-17 10:06:14

标签: android exception finalizer mapactivity

我的代码中有这些行:

// 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;
    }

当应用程序运行第tabHost.addTab(tabspecWhereAmI);行时,我只在LogCat中出现以下错误,程序运行没有任何问题:

10-17 13:38:01.164: W/MapActivity(4815): Recycling dispatcher android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher@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_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher@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)

此异常发生在onCreate(...) ActWhereAmI方法之前。我的问题类似于这个问题:Uncaught exception thrown by finalizer

为什么我会收到此错误,如何解决?

3 个答案:

答案 0 :(得分:4)

你在做与db有关的事吗?它几乎听起来像正在执行数据库操作的活动已关闭光标(手动或自动),然后尝试在finalize()中执行某些操作,或者操作系统关闭光标。

如果是#2,则可能意味着您可能必须手动关闭光标。如果是这种情况但是如果您需要打开活动,请考虑在onResume / onPause或onStart / onStart中重新打开/关闭它

有人提到可能是因为你试图同时打开其中两个

答案 1 :(得分:1)

这与CursoronStop()中的onDestroy()有某种关联。您可以通过致电closeTab()closeAllTabs()来调用它。

希望这会有所帮助。

答案 2 :(得分:1)

在应用程序遍历另一个活动之前,请记住在完成光标后关闭光标。