我在理解这两个Window标志之间的区别时遇到了一些麻烦,并且在每个标志需要使用时都不是100%肯定的.
文档Window.FEATURE_ACTIVITY_TRANSITIONS说:
允许活动通过发送或接收使用
makeSceneTransitionAnimation(Activity, Pair[])或创建的ActivityOptions包来运行活动转换makeSceneTransitionAnimation(Activity, View, String).
而文档Window.FEATURE_CONTENT_TRANSITIONS说:
用于请求窗口内容更改的标志应使用a进行动画处理
TransitionManager.在
TransitionManager使用设置setTransitionManager(TransitionManager).如果未设置,TransitionManager则将使用默认值.
该文件指出,下列Window方法需要FEATURE_ACTIVITY_TRANSITIONS标志启用,但只字不提是否将FEATURE_CONTENT_TRANSITIONS启用的需求,以及(注意,根据源代码,FEATURE_ACTIVITY_TRANSITIONS是true和FEATURE_CONTENT_TRANSITIONS是false在默认情况下材料为主题的应用程序):
get{Enter,Exit,Return,Reenter}Transition()set{Enter,Exit,Return,Reenter}Transition()getSharedElement{Enter,Exit,Return,Reenter}Transition()setSharedElement{Enter,Exit,Return,Reenter}Transition()getTransitionBackgroundFadeDuration()setTransitionBackgroundFadeDuration()换句话说,基于此信息似乎FEATURE_ACTIVITY_TRANSITIONS是应用程序需要启用的功能标志,以便使用Lollipop的新活动转换API.然而,令我困惑的是,Android开发者网站上的这篇文章指出,FEATURE_CONTENT_TRANSITIONS为了实现自定义活动转换,需要启用它.
所以这是我的问题:
FEATURE_ACTIVITY_TRANSITIONS启用和FEATURE_CONTENT_TRANSITIONS禁用?何时启用FEATURE_CONTENT_TRANSITIONS实际需要的标志?FEATURE_ACTIVITY_TRANSITIONS和启用FEATURE_CONTENT_TRANSITIONS是否有意义?或者是否也FEATURE_CONTENT_TRANSITIONS需要FEATURE_ACTIVITY_TRANSITIONS启用?谢谢!
问题:ActivityA启动ActivityB,共享元素转换间歇性崩溃不一致可重现的Api级别:23,24和25
启动活动的代码:
Intent intent = new Intent(this, ActivityB.class);
Pair<View, String> logoTransition = Pair.create(logo, getString(R.string.transition_logo));
Pair<View, String> logoTextTransition = Pair.create(logoText, getString(R.string.transition_logo_text));
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, logoTransition, logoTextTransition);
ActivityCompat.startActivity(this, intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
Stacktrace(API 23):
Exception java.lang.IllegalArgumentException:
android.os.Parcel.readException (Parcel.java:1606)
android.os.Parcel.readException (Parcel.java:1555)
android.app.ActivityManagerProxy.isTopOfTask (ActivityManagerProxy.java:4787)
android.app.Activity.isTopOfTask (Activity.java:5753)
android.app.Activity.cancelInputsAndStartExitTransition (Activity.java:4075)
android.app.Activity.startActivityForResult (Activity.java:4052)
android.app.Activity.startActivity (Activity.java:4312)
android.support.v4.content.ContextCompat.startActivity (ContextCompat.java)
__null__.getDrawable (ContextCompat.java)
__null__.isDeviceProtectedStorage (ContextCompat.java)
com.my.app.activity.ActivityA.startMainActivity (ActivityA.java)
Run Code Online (Sandbox Code Playgroud)
有谁知道这种行为的原因是什么?有什么建议的解决方案吗?