因为bundle传递数据时,只支持基本数据类型,所以在传递数据时,要将对象序列化转化成可以存储或者可以传输的本质状态,即字节流。序列化后的对象可以在网络,页面之间传递,也可以存储到本地。
Serialzable(Java自带)
序列化对象,转化成可以存储或者可以传输的本质状态。
Parcelable(安卓专用)
Parcelable可以实现相同的效果,但是不是将对象序列化,而是将对象进行分解,分解后的每一个部分,都是Intent所支持的数据类型,这就也实现了传递对象的功能了。
比较:Serialzable简单但是低效,开销大,适合将对象序列化后,进行本地存储和网络传输。Parcelable高效但是麻烦,适合内存序列化,安卓传递对象专用。
安卓动画分类:
View Animation(视觉动画):视觉动画作用的对象是View,支持四种动画效果,分别是平移,缩放,旋转和透明度动画。视觉动画可以通过XML或者代码动态创建,对于视觉动画建议采用XML文件定义。因为它具有更好的可读性和可重用性。
Drawable Animation(帧动画):顺序播放一组预先定义好的图片,不同于View动画,系统提供了另外一个类AnimationDrawable来使用帧动画。
Property Animation(属性动画):Android 3.0以后引入了属性动画,属性动画可以轻而易举实现视觉动画做不到的事,比如:将一张图片进行3D旋转。说白了,属性动画的实现原理就是修改控件的属性值实现的动画。
区别:
属性动画才是真正实现了View的移动,视觉动画对View的移动,更像是在不同位置绘制了一个影子,实际View还是处于原来的位置。如果Activity销毁时,而属性动画没有随之销毁,那么属性动画会导致Activity无法回收而造成内存泄漏。而视觉动画就不会出现这个问题。在Activity切换,窗口弹出等情景有着很好的表现。使用帧动画时,不要使用过多过大的图片,容易导致内存不足。
为什么属性动画移动后仍然可以点击?
因为属性动画所改变的东西,会更新到这个view的矩阵中,所以当ViewGroup分派事务的时候,会将当前正确的触摸坐标,转换成矩阵变化后的坐标。
参考文章:https://juejin.im/post/5e5c5e306fb9a07cbe346d71#heading-26