在API 27中,在startActivityForResult之后崩溃。

5 浏览
0 Comments

在API 27中,在startActivityForResult之后崩溃。

更新到API 27和Support库27.0.2后,我突然在Crashlytics中看到了很多这样的堆栈跟踪:

Fatal Exception: java.lang.IllegalArgumentException
    at android.os.Parcel.readException(Parcel.java:1544)
    at android.os.Parcel.readException(Parcel.java:1493)
    at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:5108)
    at android.app.Activity.isTopOfTask(Activity.java:5688)
    at android.app.Activity.startActivityForResult(Activity.java:3973)
    at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(Source:54)
    at android.support.v4.app.FragmentActivity.startActivityForResult(Source:67)

我像这样调用它:

ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, R.anim.slide_in_from_right, R.anim.fade_out);
startActivityForResult(intent, REQ_ACTION, options.toBundle());

我无法阅读源代码,因为它尚未发布。我甚至尝试替换并使用android-26的代码,但它们是不同的。

对于上述调用,有一个警告说BaseFragmentActivityApi16.startActivityForResult只能从同一库组中调用,所以我通过使用ActivityCompat进行了修复,但我不认为这会解决崩溃问题。

这是一个平台问题还是我可以解决它?

编辑

if (Build.VERSION.SDK_INT >= 21) {
    ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, R.anim.slide_in_from_right, R.anim.fade_out);
    startActivityForResult(intent, REQ_ACTION, options.toBundle());
} else {
    ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, R.anim.slide_in_from_right, R.anim.fade_out);
    ActivityCompat.startActivityForResult(this, intent, REQ_ACTION, options.toBundle());
}

如果我根据我的评论中的链接更改为上述代码,Android Studio会出现上述的警告。这可能与问题有关。

0
0 Comments

在API 27中,调用startActivityForResult后发生崩溃的问题可能是由于使用了ActivityOptions而不是ActivityOptionsCompat所导致的。

解决方法是在API 21以下使用ActivityOptionsCompat代替ActivityOptions。

以下是修改后的代码示例:

if (Build.VERSION.SDK_INT >= 21) {
  ActivityOptions options = ActivityOptions.makeCustomAnimation(activity, 
  R.anim.slide_in_from_right, R.anim.fade_out);
  startActivityForResult(intent, REQ_ACTION, options.toBundle()); 
} else {
  ActivityOptionsCompat options = ActivityOptionsCompat
  .makeCustomAnimation(activity,R.anim.slide_in_from_right,R.anim.fade_out);
  ActivityCompat.startActivity(this, intent, options.toBundle());
}

希望这能帮到你。

0
0 Comments

问题原因:在API 27中,需要使用Activity对象来调用startActivityForResult方法,而不是使用Context对象。如果使用Context对象调用startActivityForResult方法,会导致该方法不存在。

解决方法:如果context是Activity类的实例,需要将其转换为Activity对象后再调用startActivityForResult方法。

Context context = ...;
context.startActivityForResult(...); // 这个方法不存在
((Activity)context).startActivityForResult(...); // 这个方法可以使用

这样做可以消除IDE的警告,但不确定是否能解决崩溃问题。我会等待几天看看结果。我正在使用27.1.0版本,崩溃是在6.0.1版本中发生的。

0
0 Comments

这是一个关于在API 27中使用startActivityForResult后导致崩溃的问题。在这个对话中,提供了一个解决方法,并询问是否解决了问题。

解决方法:

你可以尝试这段代码:

startActivityForResult(intent, REQ_ACTION)

overridePendingTransition(R.anim.slide_in_from_right, R.anim.fade_out);

这可能会解决问题。我只需要等待几天或几周,直到我们的应用的下一个版本被提交,然后我会接受这个答案。

回答者回答说会等待解决。

最后一个问题询问这种方法是否帮助解决了问题。

0