同时拥有共享元素动画和自定义进入动画会导致Activity泄漏。
你有什么想法是什么原因吗?
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * com.feeln.android.activity.MovieDetailActivity已经泄露:
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * GC ROOT android.app.ActivityThread$ApplicationThread.this$0
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.app.ActivityThread.mActivities
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.util.ArrayMap.mArray
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了数组 java.lang.Object[].[1]
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.app.ActivityThread$ActivityClientRecord.activity
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 com.feeln.android.activity.MovieDetailActivity.mActivityTransitionState
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.app.ActivityTransitionState.mEnterTransitionCoordinator
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.app.EnterTransitionCoordinator.mEnterViewsTransition
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.transition.TransitionSet.mParent
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.transition.TransitionSet.mListeners
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了数组 java.lang.Object[].[1]
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.transition.TransitionManager$MultiListener$1.val$runningTransitions (匿名类扩展自android.transition.Transition$TransitionListenerAdapter)
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 android.util.ArrayMap.mArray
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了数组 java.lang.Object[].[2]
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 引用了 com.android.internal.policy.impl.PhoneWindow$DecorView.mContext
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 泄露了 com.feeln.android.activity.MovieDetailActivity实例
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ [ 09-21 16:19:31.007 28269:31066 D/LeakCanary ]
* 引用密钥: af2b6234-297e-4bab-96e9-02f1c4bca171
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * 设备: LGE google Nexus 5 hammerhead
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * Android版本: 5.1.1 API: 22 LeakCanary: 1.3.1
09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ *
要复现此问题,您需要拥有一个大的共享图像动画以及自定义的EnterAnimation和setEnterSharedElementCallback。所有这些都来自支持库。
以下是我设置EnterTransition的方式:
private SharedElementCallback mCallback = new SharedElementCallback() {
@Override
public void onSharedElementStart(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
if(sharedElements.size()>0)
getWindow().setEnterTransition(makeEnterTransition(getWindow().getEnterTransition(), getSharedElement(sharedElements)));
}
}
private View getSharedElement(List<View> sharedElements)
{
for (final View view : sharedElements)
{
if (view instanceof ImageView)
{
return view;
}
}
return null;
}
};