1.Android5.0之后,ART模式取代dalvik,ART采用的是安装时编译,而不是运行时编译。
2.Activity、Service、Application都是继承自Context。
3.getApplicationContext()方法可以获取整个APP的Context,但是通过getApplicationContext()获得的是整个应用的上下文引用,这个与某个组件的上下文引用有的时候是不一样 的。
4.ADB命令 push 和install 都可以安装apk但是安装的目录不一样,Install安装在data/data目录下,而push则是安装在手机的存储系统中。
5 View的测量是在onMeasure()方法中进行的。
6.View的测量模式有三种分别是EXACTLY、AT_MOST、UNSPECIFIED.;
EXATTLY 是精确值模式,如:100dp,match_parent;
AT_MOST是最大值模式,如:控件宽高都是自适应的,不超过父控件的最大尺寸就好了;
UNSPECIFIED是不指定器大小测量的模式。通常自定义View时使用。
7.View的onMeasure()方法默认只支持EXACTLY模式,所以自定义View大小为自适应时需要重写该方法。
8.在自定义ViewGroup时,需要重写onLayout()方法,来控制其子View显示的位置,大小也是通过onMeasure()方法来实现。
9.自定义View一些重要的回调方法:
onFinishInflate():从xml加载组件后回调;
onSizeChange():组件大小改变时回调;
onMeasure90:回调该方法进行测量;
onLayout():回调该方法确定显示的位置;
onTouchEvent():监听到触摸事件的回调。
10.super.onDraw()来实现原生控件的功能,但是在调用该方法之前和之后,我们都可以实现自己的逻辑,分别是在系统执行功能前后实现自己的操作!
11.强制刷新View的方法:
invalidate() UI线程更新视图
postInvalidate():在新线程中更新视图
12.ViewHolder模式充分利用ListView的师徒缓存机制,避免了每次在调用getView()时候都去通过findBiewByid()来实例化控件。
13.ListView设置分割线属性:
android:divider="@android:color/darker_gray"
android:dividerHeight="10dp"
设置分割线透明android:divider="@null"
设置滚动条不出现 android:scrollbars="none"
设置Listview的点击效果可以修改listSelector来修改。
14.ListView.setSelection(N);N表示需要显示的第N个item,该方法是瞬间完成的,还可以用mListView.smoothSrcllBy(distance,duration);
mListView.smoothScrollByOffset(offset);mListView.smoothScrollToPosition(index);
15.ListView提供setEmptyView方法来处理空数据,显示无数据时的界面。
16,。在Android中将屏幕的左上角的顶点作为Android坐标系的原点。从这个点向右叫做x轴正方向,向下叫y轴的正方向。(注意与视图坐标系的区别)。
17.获取坐标的不同方法:
View 提供的:
getTop():获取到View自身的顶边对其父控件顶边的距离;
getLeft():获取到View自身的左边对其父控件左边的距离;
getRight():获取到View的自身的右边对其父控件左边的距离;
getBottom():获取到View的自身的底边对其父控件顶边的距离。
MotionEvent提供的方法:
getX():获取点击事件距离控件左边的距离,即:视图坐标;
getY():获取点击事件距离控件顶边的距离,即:视图坐标;
getRawX():获取点击事件距离整个屏幕左边的距离;即:绝对坐标;
getRawY():获取点击事件距离整个屏幕顶边的距离;即:绝对坐标。
18.offsetLeftAndRight(offsetX)同时对left和right进行偏移;
offsetTopAndBottom(offsetY)同时对Top和Bottom进行偏移。
19.LayoutParams是一个View布局参数。getLayOutParas必须要有一个父布局,不然系统无法取得LayoutParas,所以,需要用 LinearLayout.LayoutParas 或者是RelativeLayout.LayoutParas = View.getLayoutParas();
20.scrollTo 是移动要具体的某一点,scrollBy是移动某一个增量。如果直接scrollTo,无法直接移动View,移动的是View的content,如TextView移动的是文本,ImageView移动的是drawable对象。需要用((View)getParent).scrollTo(offsetX,offsetY);想要移动到具体某一点需要改为((View)getParent).scrollTo(-offsetX,-offsetY)
21.Scroller类可以实现平滑移动的效果,而不是瞬间完成的移动,与scrollTo和scrollBy不同。模拟滑动需要重写Scroller类中的computeScroll()方法;
之后调用startScroll()方法。
22.系统通过提供Canvas对象提供回话方法,各种方法如下:
drawPoint(点),drawLine(线),drawRect(矩形),drawVertices(多边形),drawArc(弧),drawCircle(圆)等。
23.XML绘图:
shape 属性有Corner(半径),gradient(渐变),padding(边距),size(大小),solid(填充颜色),stroke(指定边框)
Layer 图层,通过layer、layer-list实现的图层效果,图片会一次叠加。
Selector 背景选择器
可以多个结合一起使用!
24.Layer图层
通过mCanvas中的saveLayer()、saveLayerAlpha()方法将一个图层入栈,使用restore()、restoreToCount()方法讲图层出栈,入栈的时候,后面的 所有操作都发生在这个图层上面,而出栈的时候则会把图像绘制到上层的Canvas上。
25.Android动画分为属性动画和师徒动画
视图动画有透明度动画、旋转动画、位移动画、缩放动画等。
属性动画和视图动画的区别在于:视图动画并不改变事件相应的位置,只是单纯的修改了显示。并不支持点击。
26.启动模式
singleTop和singleTask的区别:singleTop是检测栈顶元素是否是需要启动的Activity,而singleTask是检测整个Activity栈中是否存在当前需要启动的 Activity,如果存在,就将该Activity置于栈顶并将Activity以上的Activity销毁,并开辟新的任务栈。
27.Android性能优化可分为布局优化和内存优化
1.布局优化时可以使用ViewStub控件延迟显示。一旦ViewStub被显示或者是inflate之后就消失了,故无法操作两次的显示。其中,ViewStub和 View.GONE不一样的地方是View.GONE钢价在布局时就已经添加到布局树上,而ViewStub是在显示时才渲染布局的。所以,ViewStub更加高效。
2. 内存优化
Bitmap优化:
1.使用适当分辨率和大小的图片;
2.及时回收内存
3.使用图片缓存,通过内存缓存(LruCache)和硬盘缓存(DiskLruCache)可以更好的使用BItmap.
3.代码优化
如果觉得《《Android群英传》读书笔记》对你有帮助,请点赞、收藏,并留下你的观点哦!