Android权威指南与第一行代码(第二版)查漏补缺
Android权威指南与第一行代码(第二版)查漏补缺
动画
3.0之前:
{
frame Animation:帧动画,用许多图像组成的动画。
tween Animation:补间动画,可以旋转,缩放,改变透明度
}
3.0之后:
{
ValueAnimatoer,ObjectAnimator:通过不断改变属性的值从而实现动画效果,
}
Fragment
方法:setRetainInstance(true)
作用:在onCreate()中通过调用setRetainInstance(true)可以保证fragment在旋转屏幕的时候不销毁fragment。
原理:在旋转的时候,Activity的fragmentManager只销毁fragment的视图而不销毁fragment的实例。并且在旋转完成后,新建的FragmentManager发现了这个fragment的实例,就重建这个Fragment的视图,重用这个fragment。
注意:fragment只能短暂保留状态,即脱离了旧Activity后要理解从新附加给新的Activity
Drawable
在drawable中的xml文件类似与SVG一样的矢量图,因此不会发生失真现象。
layer-list:这个东西类似与FrameLayout,我们可以在这个标签内使用层级的图形,以便形成许多效果,例如:点击按钮的时候形成边环
进程与任务
进程概念:进程是拥有资源的最小单位,每个应用程序的实例都对应一个进程。多个相同的应用程序的实例共用一个进程。
任务(返回栈):一个应用程序可以拥有许多个栈,每个栈 都由许多Activity实例组成。平时创建的Activity实例都存于栈中。一个栈中的Activity实例可能来自不同的进程实例。例如:在饿了么打开微信支付的Activity
图解:
Image.png
Activity启动模式
standrad:默认的,每次都新建一个新的Activity实例
singleTop:如果栈顶的实例是这个Ac'ti'v'i't'y的话,就复用他,否则就新建一个
singleTask:在栈中寻找是否存在这个Activity的实例,不存在则新建一个,存在则把这个实例上的其他Activity全部移出栈
singleInstance:启动一个新的返回栈来管理这个Activity,并且这个栈中只有这个Activity的一个实例,之后无论哪个app启动这个Activity都公用这个栈中的这个实例
启动Activity的最佳做法
public static void actionStart(Context context,Params...){
Intent i = new Intent(context,this);
i.putExtras(..);
i.putExtras(..);
context.startActivity(i);
}
好处:在两个人或者其他人接手你的项目的时候,无须花时间来阅读你的代码就可以启动你的Activity
View
Visible:可见(默认)
Invisible:不可见,但是依然会占据屏幕
Gone:不可见,但不占据屏幕
广播
标准广播:可理解为并发收到这个广播
有序广播:优先级高的先收到,可截断
本地广播:只能在本应用程序中使用:LocalBroadcastManager
Sqlite
当Sqlite数据库满的时候,SqlDatabaseHelper.getWritableDatabase()会报错.因此每次通过这种方式获取数据库的时候要使用try catch
动态获取权限
普通权限:在Manifest.xml中配置的权限
危险权限:日历,相机,联系人,位置,麦克风,电话,传感器,短信,存储。危险权限只要获取权限组中的一个权限,就默认获取这个权限组的所有权限了,例如:获取了读内存卡的权限,则默认也获取了写内存卡权限
获取文件
7.0之前:Uri.fromFile()
7.0之后:FileProvider.getUriFromFile()