Android 共享元素转换中的IllegalArgumentException

Android 共享元素转换中的IllegalArgumentException,android,animation,android-activity,shared-element-transition,Android,Animation,Android Activity,Shared Element Transition,实现了活动到活动共享元素的转换。它工作正常,但在运行>=棒棒糖的很少设备上接收崩溃 报告: Fatal Exception: java.lang.IllegalArgumentException at android.os.Parcel.readException(Parcel.java:1550) at android.os.Parcel.readException(Parcel.java:1499) at android.app.ActivityMa

实现了活动到活动共享元素的转换。它工作正常,但在运行>=棒棒糖的很少设备上接收崩溃

报告:

Fatal Exception: java.lang.IllegalArgumentException
       at android.os.Parcel.readException(Parcel.java:1550)
       at android.os.Parcel.readException(Parcel.java:1499)
       at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:4654)
       at android.app.Activity.isTopOfTask(Activity.java:5557)
       at android.app.Activity.startActivityForResult(Activity.java:3903)
       at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
       at android.app.Activity.startActivity(Activity.java:4146)
       at com.mypackage.Activity1.method1(Activity1.java:414). 
Intent intent = new Intent(Activity1.this, Activity2.class);
     ActivityOptionsCompat options = ActivityOptionsCompat.
                    makeSceneTransitionAnimation(Activity1.this,
                            logoImageView,
                            ViewCompat.getTransitionName(logoImageView));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                startActivity(intent, options.toBundle());
            } else {
                startActivity(intent);
            }
            overridePendingTransition(R.anim.stay, R.anim.stay); 
Intent intent = new Intent(Activity1.this, Activity2.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(Activity1.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    startActivity(intent, options.toBundle());
} else {
    ActivityOptionsCompat options = ActivityOptionsCompat.
            makeSceneTransitionAnimation(SplashActivity.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    ActivityCompat.startActivity(SplashActivity.this, intent, options.toBundle());
}
overridePendingTransition(R.anim.stay, R.anim.stay);  
尝试过这个:

Fatal Exception: java.lang.IllegalArgumentException
       at android.os.Parcel.readException(Parcel.java:1550)
       at android.os.Parcel.readException(Parcel.java:1499)
       at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:4654)
       at android.app.Activity.isTopOfTask(Activity.java:5557)
       at android.app.Activity.startActivityForResult(Activity.java:3903)
       at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
       at android.app.Activity.startActivity(Activity.java:4146)
       at com.mypackage.Activity1.method1(Activity1.java:414). 
Intent intent = new Intent(Activity1.this, Activity2.class);
     ActivityOptionsCompat options = ActivityOptionsCompat.
                    makeSceneTransitionAnimation(Activity1.this,
                            logoImageView,
                            ViewCompat.getTransitionName(logoImageView));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                startActivity(intent, options.toBundle());
            } else {
                startActivity(intent);
            }
            overridePendingTransition(R.anim.stay, R.anim.stay); 
Intent intent = new Intent(Activity1.this, Activity2.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(Activity1.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    startActivity(intent, options.toBundle());
} else {
    ActivityOptionsCompat options = ActivityOptionsCompat.
            makeSceneTransitionAnimation(SplashActivity.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    ActivityCompat.startActivity(SplashActivity.this, intent, options.toBundle());
}
overridePendingTransition(R.anim.stay, R.anim.stay);  
然后从这个软件中选择:

Fatal Exception: java.lang.IllegalArgumentException
       at android.os.Parcel.readException(Parcel.java:1550)
       at android.os.Parcel.readException(Parcel.java:1499)
       at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:4654)
       at android.app.Activity.isTopOfTask(Activity.java:5557)
       at android.app.Activity.startActivityForResult(Activity.java:3903)
       at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
       at android.app.Activity.startActivity(Activity.java:4146)
       at com.mypackage.Activity1.method1(Activity1.java:414). 
Intent intent = new Intent(Activity1.this, Activity2.class);
     ActivityOptionsCompat options = ActivityOptionsCompat.
                    makeSceneTransitionAnimation(Activity1.this,
                            logoImageView,
                            ViewCompat.getTransitionName(logoImageView));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                startActivity(intent, options.toBundle());
            } else {
                startActivity(intent);
            }
            overridePendingTransition(R.anim.stay, R.anim.stay); 
Intent intent = new Intent(Activity1.this, Activity2.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(Activity1.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    startActivity(intent, options.toBundle());
} else {
    ActivityOptionsCompat options = ActivityOptionsCompat.
            makeSceneTransitionAnimation(SplashActivity.this,
                    logoImageView,
                    getString(R.string.splashLogoSharedTransition));
    ActivityCompat.startActivity(SplashActivity.this, intent, options.toBundle());
}
overridePendingTransition(R.anim.stay, R.anim.stay);  
两个代码在以下位置发生崩溃:

startActivity(intent, options.toBundle());  

曾经面对过吗?有什么提示吗?

您似乎正在使用
窗口。功能\u内容\u转换
。但是,您应该使用
Window.FEATURE\u ACTIVITY\u TRANSITIONS

styles-v21.xml
中,添加:

<item name="android:windowActivityTransitions">true</item>
<!-- optional -->
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item> 
true
真的
真的
从文档中:

:

允许活动通过发送或接收
ActivityOptions
bundle来运行活动转换,bundle是使用
MakeScenetTransitionAnimation(活动,对[])
MakeScenetTransitionAnimation(活动,视图,字符串)
创建的

:

用于请求窗口内容更改应使用
TransitionManager
设置动画的标志

TransitionManager
是使用
setTransitionManager(TransitionManager)
设置的。如果未设置,将使用默认的TransitionManager


有关更多信息,请参阅。

根据本文,您不应使用API 21以上的ActivityOptions兼容:

我没有使用它,但我仍然有这个崩溃:

我想它还是用错了版本


不过,知道了这一点,你也许能够解决你的问题。

这不应该是新的意图(Activity1.this,Activity2.class)?@ShahiM是的,复制错误。更正了它。
logoImageView
是否具有以下属性:
android:transitionName=“myTransition”
是的,它具有。甚至Activity2中的图像视图也有相同的转换。另外,v21/styles.xml也有一些问题,我看不出代码中还有任何其他可能的问题。在我的一个项目中,我有完全相同的代码可以正常工作。这是一个遗留代码,我不确定添加了什么。如果我在样式中添加true和内容转换标志,可以吗?可以。当然,酷。谢谢你的信息。我会添加它,看看是否还会有更多的崩溃。我认为我应该关注Google doc,而不是一篇有点过时的博客文章,上面提到了contentTransition。我会把这个补丁发布到play store上看看。崩溃并没有发生在我的手机上,而是发生在少数用户的手机上。我相信它会起作用,我会接受。我添加了try for startActivity(intent,options.toBundle());在catch中,我在没有activityOptions的情况下开始了活动,也就是所谓的startActivity(intent);。在catch()块中添加了一个事件,以了解此答案是否仍然发生崩溃。到目前为止,我收到了其中8起事件,这意味着此解决方案无助于修复崩溃。但我的应用程序不会因此崩溃,因为我捕获了异常。:)我没有按照我的问题使用。不管怎么说,正如我在问题中所解释的,当我使用ActivityOptions时,我遇到了棒棒糖和更高版本的崩溃。对不起,我没有注意到第二部分是关于同一篇文章的。但现在我注意到您同时使用了ActivityOptions和overridePendingTransitions。我不知道这是否是问题的根源?但我需要对我的案件进行重写。