适用于Android 6.0-7.1的Parcel.readException

适用于Android 6.0-7.1的Parcel.readException,android,appcompatactivity,Android,Appcompatactivity,自12月12日以来,我犯了很多这样的错误。我不相信我已经改变了任何重要的东西,我可能把这归因于AppCompat库中的潜在更新。以下是其中一个日志: java.lang.IllegalArgumentException: at android.os.Parcel.readException (Parcel.java:1603) at android.os.Parcel.readException (Parcel.java:1552) at android.app.Activi

自12月12日以来,我犯了很多这样的错误。我不相信我已经改变了任何重要的东西,我可能把这归因于AppCompat库中的潜在更新。以下是其中一个日志:

 java.lang.IllegalArgumentException: 
  at android.os.Parcel.readException (Parcel.java:1603)

  at android.os.Parcel.readException (Parcel.java:1552)

  at android.app.ActivityManagerProxy.isTopOfTask (ActivityManagerProxy.java:4986)

  at android.app.Activity.isTopOfTask (Activity.java:5731)

  at android.app.Activity.cancelInputsAndStartExitTransition (Activity.java:4049)

  at android.app.Activity.startActivityForResult (Activity.java:4026)

  at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult (BaseFragmentActivityApi16.java:54)

  at android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:67)

  at android.app.Activity.startActivity (Activity.java:4294)

  at android.support.v4.content.ContextCompat.startActivity (ContextCompat.java:143)
这个问题还有其他一些堆栈溢出问题,但它们通常都有来自异常的实际消息。最常见的结果是与AppCompatActivity调用和Activity调用不兼容

虽然我的所有活动都基于AppCompat,但我已确保使用
startActivity
调用,并使用
ActivityOptions
与compat对应的动画

有人有什么想法吗

如果源代码是必要的,我的是完全开源的。任何不在里面的东西都在我的口袋里

我自己从来没有复制过这个错误,但问题似乎主要发生在三星和摩托罗拉的设备上


相关代码片段:

崩溃发生在我的MainActivity和LoginActivity中,因此这是用户的第一次活动转换

基本主题:

<style name="FrostThemeBase" parent="MaterialDrawerTheme.ActionBar">
    <item name="colorPrimary">@color/facebook_blue</item>
    <item name="colorPrimaryDark">@color/facebook_blue_dark</item>
    <item name="colorAccent">@android:color/white</item>
    <item name="android:windowSoftInputMode">adjustResize</item>
</style>

<style name="FrostTheme" parent="@style/FrostThemeBase">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
对于启动活动,我有以下助手方法:

inline fun <T : Activity> Context.startActivity(
        clazz: Class<T>,
        clearStack: Boolean = false,
        bundleBuilder: Bundle.() -> Unit = {},
        intentBuilder: Intent.() -> Unit = {}) {
    val intent = Intent(this, clazz)
    if (clearStack) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
    intent.intentBuilder()
    val bundle = Bundle()
    bundle.bundleBuilder()
    startActivity(intent, bundle)
    if (clearStack && this is Activity) finish()
}
inline fun Context.startActivity(
克拉兹:同学们,
clearStack:Boolean=false,
bundleBuilder:Bundle.(->Unit={},
intentBuilder:Intent.(->Unit={}){
val intent=intent(这个,克拉兹)
if(clearStack)intent.addFlags(intent.FLAG\活动\清除\任务或intent.FLAG\活动\新任务)
intent.intentBuilder()
val bundle=bundle()
bundle.bundleBuilder()
startActivity(意向、捆绑)
如果(清除和这是活动)完成()
}
简而言之,对于登录,将通过设置clear task和new task标志来清除堆栈,活动将完成。我现在意识到,默认情况下我确实传递了一个空包,因此这可能是一个潜在的问题


还有一些其他的差异,比如某些活动的自定义活动转换,尽管我不认为这是一个问题,因为没有它的活动也会崩溃。

这已经有一段时间了,但我相信错误在于
bundleBuilder
函数有时是空的,导致传递一个空的
包。解决方案是仅在bundle为非空时使用bundle,否则使用null


这个问题似乎是特定于某些三星设备。

发生的任何一点?请考虑在这里找到相关的代码片段。期望人们深入研究您的项目和相关的库来发现问题有点牵强。只要把代码放在你要放进去的地方,然后从包裹里取出东西就行了。我已经添加了一些代码片段。我对包裹问题的假设是在捆绑包中的,因为意向附加不应导致崩溃。这个问题对我来说很奇怪。没有消息输出和2。我的用户中有0.05%会出现这种情况(这仍然很重要)。稍后,我将深入研究AppCompat的源代码,如果发现任何其他内容,请更新我的问题
inline fun <T : Activity> Context.startActivity(
        clazz: Class<T>,
        clearStack: Boolean = false,
        bundleBuilder: Bundle.() -> Unit = {},
        intentBuilder: Intent.() -> Unit = {}) {
    val intent = Intent(this, clazz)
    if (clearStack) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
    intent.intentBuilder()
    val bundle = Bundle()
    bundle.bundleBuilder()
    startActivity(intent, bundle)
    if (clearStack && this is Activity) finish()
}