《Android群英传》读书笔记

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.代码优化








猜你喜欢

转载自blog.csdn.net/u012977315/article/details/49784697