ActivityManagerProxy中的IllegalArgumentException

Gab*_*eto 8 android android-activity

问题: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)

有谁知道这种行为的原因是什么?有什么建议的解决方案吗?

Gen*_*mes 5

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

由于翻译场景引入了表格 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());
    }
Run Code Online (Sandbox Code Playgroud)

  • 我认为 ActivityCompat 的全部目的是您不必检查 SDK 版本即可应用新功能。你有多大信心这会解决我的问题? (3认同)