2017-02-18 137 views
6

问题:ActivityA与共享单元转变开始ActivityB间歇崩溃 不一致地重现 API级别:23,24和25抛出:IllegalArgumentException在ActivityManagerProxy

代码以启动活动:

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()); 

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) 

有谁知道是什么原因导致此行为? 对此有何建议修复?

+0

什么什么情况下是这样'startActivity()'调用,即什么课是你吗? – azizbekian

+0

从活动 –

+0

调用请参阅此链接(http://stackoverflow.com/questions/26688374/android-activity-transitions-using-support-v4-up-to-date-with-android-l)希望这会帮助你。 –

回答

3

我想,你不应该使用该版本的支持库的方法。当然,我无法弄清楚,从你现有的问题,由于随机堆栈跟踪。

由于Tranlsation场景引入了表格4.4。您可以包含API弃用。此外,建议,否则,为什么我们需要这两种类型?

if (Build.VERSION.SDK_INT >= 21) { 
     ActivityOptions options = ActivityOptions 
     .makeSceneTransitionAnimation(this, logoTransition, logoTextTransition); 
     startActivity(this, intent, options.toBundle()); 
    } 
    else { 
     ActivityOptionsCompat options = ActivityOptionsCompat 
     .makeSceneTransitionAnimation(this, logoTransition, logoTextTransition); 
     ActivityCompat.startActivity(this, intent, options.toBundle()); 
    } 
+2

我认为ActivityCompat的全部目的是,您不必检查SDK版本以应用新的功能。你对此有多信心,这将解决我的问题? –

+1

@GaborPeto对于ActivityCompat是的,但不适用于选项类型ActivityOptionsCompat。 – GensaGames

+0

@GensaGames我仍然在棒棒糖设备上得到与上面相同的代码的例外。 (Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP){ ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(MyActivity.this,logoImageView,“transition_name”); startActivity(intent,options.toBundle()); } 在startActivity()发生异常。 – cgr

0

在相关活动的这样的onCreate()方法尝试加载转换:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 

Transition mTransition = //your transitions 
getWindow().setSharedElementEnterTransition(mTransition); 
getWindow().setSharedElementExitTransition(mTransition); 
1

在我的情况下,这种情况发生,因为我上的点击动作订阅两次,所以startActivity被连续叫了两声。

希望这可以是有益的某一个:)

相关问题