因此,Leak Canary发现了一个泄漏,我将泄漏范围缩小到了shared element transition
。泄漏金丝雀指出被呼叫的Activity
(第二个)正在泄漏。附带说明一下,我也传递了一个Parcelable
对象,尽管在我看来这不是问题。除了泄漏之外,一切都按预期进行。
从任何其他类调用时,这都会泄漏DetailActivity。
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("intent_detail_object", detailObject);
//shared element transitions
Pair<View, String> p1 =Pair.create(v_name, "name");
Pair<View, String> p2 =Pair.create(relativeLayout, "layout");
ActivityOptionsCompat options =ActivityOptionsCompat.makeSceneTransitionAnimation(this, p1, p2);
ActivityCompat.startActivityForResult(this, intent, "is_updated", options.toBundle());
请注意,在我从“详细信息”活动返回(按后退按钮)后,似乎仅在按下后退按钮时才识别出泄漏。 AFAIK,Android处理了此过渡。
作为解决问题的一部分,我了解到,如果卸下shared element transistion
,则不会发生泄漏。
这不会泄漏
Intent intent = new Intent(activity, DetailActivity.class);
intent.putExtra("intent_detail_object", detailObject);
startActivityForResult(intent, "is_updated");