【问题标题】:IllegalArgumentException in ActivityManagerProxyActivityManagerProxy 中的 IllegalArgumentException
【发布时间】:2017-07-07 23:56:00
【问题描述】:

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

堆栈跟踪 (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)

有谁知道是什么导致了这种行为? 有什么建议的解决方法吗?

【问题讨论】:

  • 这个startActivity()被调用的上下文是什么,即你在哪个班级?
  • 从 Activity 调用
  • 请参考这个link希望这对你有帮助。

标签: android android-activity


【解决方案1】:

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

自从翻译场景引入表格 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());
    }

【讨论】:

  • 我认为 ActivityCompat 的全部目的是您无需检查 SDK 版本即可应用新功能。您对这能解决我的问题有多大信心?
  • @GaborPeto 对于 ActivityCompat 是,但不是对于选项类型 ActivityOptionsCompat。
  • @GensaGames 我在 Lollipop 设备上仍然遇到相同的异常,上面的代码相同。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(MyActivity.this, logoImageView, "transition_name"); startActivity(intent, options.toBundle());异常发生在 startActivity()。
  • 我得到相同的异常,相同的堆栈跟踪到 Activity.startActivity,堆栈上没有 AppCompat
  • @user3175580 你有额外的检查步骤吗?
【解决方案2】:

在我的例子中,这是因为我订阅了两次点击操作,所以 startActivity 连续调用了两次。

希望这对某些人有帮助:)

【讨论】:

    【解决方案3】:

    尝试在相关活动的onCreate() 方法中加载转换,如下所示:

    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
    
    Transition mTransition = //your transitions
    getWindow().setSharedElementEnterTransition(mTransition);
    getWindow().setSharedElementExitTransition(mTransition);
    

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 2014-04-16
      相关资源
      最近更新 更多