为了弄懂共享元素间数据传递到底是怎么回事,我决定粗暴野蛮的进行测试,方法很简单:打log。两个activity的所有生命周期和重要方法都打了。以下是试验结果(注意试验2紧接着试验1,没有退出MainActivity):
demo的地址:https://github.com/zengqi-ustb/activity-transitions
试验1:
试验内容(点击0,滑动至7,点击back):
刚进入:
I/test: MainActivity oncreate
I/test: MainActivity onstart
I/test: MainActivity onresume
点击0:
I/test: MainActivity onclick
//bundle = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,
//mAlbumImage, mAlbumImage.getTransitionName()).toBundle();
//这句话引起了共享元素回调函数onMapSharedElements
I/test: MainActivity bundle is null
I/test: MainActivity start activity
I/test: MainActivity onpause
I/test: DetailActivity oncreate
I/test: DetailActivity onstart
I/test: DetailActivity onresume
I/test: MainActivity onstop
滑动至7:
无
点击back:
I/test: DetailActivity finishAfterTransition
//退出应该调用了回调函数
I/test: DetailActivity sharedelement not null and positionChanged
I/test: MainActivity onrestart
I/test: MainActivity onactivityreenter
I/test: postponeEnterTransition
I/test: MainActivity onstart
I/test: startPostponedEnterTransition
//从log中可以看出,在onstart后,开始draw之前,调用了startPostponedEnterTransition,导致了共享元素
//函数的回调
I/test: MainActivity bundle not null and sharedelement not null and positionChanged
I/test: DetailActivity onpause
I/test: MainActivity onresume
I/test: DetailActivity onstop
I/test: DetailActivity ondestroy
试验2:
试验内容(点击1,滑动至6,不显示图像后点击back):
点击1:
I/test: MainActivity onclick
I/test: MainActivity bundle is null
I/test: MainActivity start activity
I/test: MainActivity onpause
I/test: DetailActivity oncreate
I/test: DetailActivity onstart
I/test: DetailActivity onresume
I/test: MainActivity onstop
滑动至6:
无
不显示图像后点击back:
I/test: DetailActivity finishAfterTransition
I/test: DetailActivity sharedelement null
I/test: MainActivity onrestart
I/test: MainActivity onactivityreenter
I/test: postponeEnterTransition
I/test: MainActivity onstart
I/test: startPostponedEnterTransition
//跟上述一样
I/test: MainActivity bundle not null and sharedelement not null and positionChanged
I/test: DetailActivity onpause
I/test: MainActivity onresume
I/test: DetailActivity onstop
I/test: DetailActivity ondestroy