抛出android.support.v7.widget.Toolbar $ SavedState时发生ClassNotFoundException

我在Android崩溃报告中看到以下错误:

android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.Toolbar$SavedState at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3974) at android.app.ActivityThread.access$900(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1299) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:149) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(NativeStart.java) Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.Toolbar$SavedState at android.os.Parcel.readParcelableCreator(Parcel.java:2154) at android.os.Parcel.readParcelable(Parcel.java:2104) at android.os.Parcel.readValue(Parcel.java:2020) at android.os.Parcel.readSparseArrayInternal(Parcel.java:2382) at android.os.Parcel.readSparseArray(Parcel.java:1742) at android.os.Parcel.readValue(Parcel.java:2077) at android.os.Parcel.readArrayMapInternal(Parcel.java:2321) at android.os.Bundle.unparcel(Bundle.java:249) at android.os.Bundle.getSparseParcelableArray(Bundle.java:1273) at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1744) at android.app.Activity.onRestoreInstanceState(Activity.java:1017) at android.app.Activity.performRestoreInstanceState(Activity.java:989) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1138) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3974) at android.app.ActivityThread.access$900(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1299) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:149) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(NativeStart.java) 

当恢复一个活动时,它似乎间歇性地发生。 我不直接访问任何代码中的SavedState类。

编辑:我的活动布局Xml是

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical"> <include layout="@layout/toolbar" /> .... 

和工具栏XML是

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

在我的Activity上创build我

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_txn); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); localBroadcastManager = LocalBroadcastManager.getInstance(getApplicationContext()); mResources = getResources(); if (savedInstanceState != null) { long id = savedInstanceState.getLong(STA_TXN_ID); ... } else { ... read fresh } mDateTV = (TextView) findViewById(R.id.ASTVDate); mDayTV = (TextView) findViewById(R.id.ASTVDay); mCatName = (TextView) findViewById(R.id.ASTVCatName); mMonthTV = (TextView) findViewById(R.id.ASTVMonth); .... Calendar c = java.util.Calendar.getInstance(); c.setTime(txn.getTxnDate()); mDateTV.setText("" + c.get(Calendar.DAY_OF_MONTH)); mDayTV.setText(c.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US)); mMonthTV.setText(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.US)); } 

而且我一直在使用appcompat-v7:22.1.1,是的,在proguard之后我得到了这些错误。

Solutions Collecting From Web of "抛出android.support.v7.widget.Toolbar $ SavedState时发生ClassNotFoundException"

看起来像下面的问题是关于它: https : //code.google.com/p/android/issues/detail?id = 196430

根据AAverin的消息来源, Google Issue 196430 ,构build工具版本24包含修复。

EG在build.gradle中更改构build工具版本:

 buildToolsVersion "24.0.0" 

或者,通过捕捉来防止崩溃(在我的具体情况下):

 try { // Temporary fix for crash issue mapView.onCreate(savedInstanceState); } catch (Throwable t) { t.printStackTrace(); }