在更新到API 27和支持库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 :(得分:2)
您可以尝试使用此代码。
startActivityForResult( intent, REQ_ACTION)
overridePendingTransition(R.anim.slide_in_from_right, R.anim.fade_out);
答案 1 :(得分:1)
旧帖子,但未得到答复,所以这里是我在21岁以上发现的内容
确保要在活动对象下寻找startActivityForResult。 在上下文对象下,您可以找到startActvity,但看不到startActivityForResult方法。
如果您的上下文是Context类但是活动,则请确保将其强制转换为Activity。
Context context = ...;
context.startActivityForResult(...); // this method will not exist
((Activity)context).startActivityForResult(...); // this method should be ok
答案 2 :(得分:0)
在api 21下面使用ActivityOptionsCompat而不是ActivityOptions。
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());
}
希望这会对你有所帮助。