1. android 4大组件
    https://blog.csdn.net/ican87/article/details/21874321
  2. activity生命周期
    Activity 类中定义了 7 个回调方法,覆盖了 Activity 生命周期的每一个环节,这 7 种方法除了 onRestart() 方法,其他都是两两相对的。
    onCreate():
    当 Activity 第一次创建时会被调用,在此方法中应当完成初始化工作,比如加载布局、绑定事件等。
    onRestart():
    表示 Activity 正在重新启动,一般情况下,当当前 Activity 从不可见重新变为可见状态时,onRestart 就会被调用。
    onStart():
    表示 Activity 正在被启动,即将开始,这时 Activity 已经出现了,但是还没有出现在前台,无法与用户交互。
    onResume():
    表示 Activity 已经可见了,并且出现在前台并开始活动。需要和 onStart() 对比,onStart() 的时候 Activity 还在后台,onResume() 的时候 Activity 才显示到前台。
    onPause():
    表示 Activity 正在停止,仍可见,正常情况下,紧接着 onStop() 就会被调用;在特殊情况下,如果这个时候快速地回到当前 Activity,那么 onResume() 就会被调用(极端情况);onPause() 执行一定要速度快,不然会影响到新的栈顶活动的使用,所以不能进行耗时操作。
    onStop():
    表示 Activity 即将停止,不可见,位于后台。可以做稍微重量级的回收工作,同样不能太耗时。
    onDestory():
    表示 Activity 即将销毁,这是 Activity 生命周期的最后一个回调,可以做一些回收工作和最终的资源回收,之后 Activity 的状态将变为销毁状态。
  3. 横竖屏切换(API13之后)
    https://blog.csdn.net/xiewenhao12/article/details/79282590
    API13之前并不清楚,没有用过
    我知道如何防止重新被加载
    android:configChanges=”screenSize|keyboardHidden|orientation”
    下面是不同configChanges的生命周期的变化
    1、不设置Activity的android:configChanges,或设置Activity的android:configChanges=”orientation”,或设置Activity的android:configChanges=”orientation|keyboardHidden”,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行一次。
    1
    2
    3
    4
    5
    6
    7
    8
    11-02 20:19:00.268 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity:  -- onPause
    11-02 20:19:00.268 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity: -- onSaveInstanceState
    11-02 20:19:00.268 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity: -- onStop
    11-02 20:19:00.268 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity: -- onDestroy
    11-02 20:19:00.318 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity: -- onCreate - orientation
    11-02 20:19:00.338 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity: -- onStart
    11-02 20:19:00.338 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity: -- onRestoreInstanceState
    11-02 20:19:00.338 13324-13324/com.ys.yoosir.screenconfigchange D/MainActivity: -- onResume
    2、配置 android:configChanges=”orientation|keyboardHidden|screenSize”,才不会销毁 activity,且只调用 onConfigurationChanged方法。
  4. Android View绘制流程
    https://cloud.tencent.com/developer/article/1745688
    measure测量:为测量宽高过程,如果是ViewGroup还要在onMeasure中对所有子View进行measure操作。
    layout布局:用于摆放View在ViewGroup中的位置,如果是ViewGroup要在onLayout方法中对所有子View进行layout操作。
    draw绘制:往View上绘制图像。
    一共有三种测量模式:
    UNSPECIFIED :父布局不会对子View做任何限制,例如我们常用的ScrollView就是这种测量模式。
    EXACTLY :精确数值,比如使用了match_parent或者xxxdp,表示父布局已经决定了子View的大小,通常在这种情况下View的尺寸就是SpacSize
    AT_MOST :自适应,对应wrap_conte nt子View可以根据内容设置自己的大小,但前提是不能超出父ViewGroup的宽高。
  5. OOM(System.gc)
    4.1 java.lang.OutOfMemoryError: Java heap space ——>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。
    4.2 java.lang.OutOfMemoryError: PermGen space ——>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出。
    4.3 java.lang.StackOverflowError ——> 不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。
    4.4 遇到的问题和解决办法:
    图片处理;
    编码方式;
    调整图片大小。
    可以在manifest里面加入这个缓解一下:android:largeHeap=“true” 512, 我忘记常规的heap了,好像是192.
    治标不治本,一旦出现oom,即使使用了largeheap发现不再出现oom,也不代表你的应用就万事大吉了,可能只是在这个测试用例里面能够成功运行。但是一旦再出现更大的情况,还是会出现OOM。
    我也尝试过catch过OOM,但是我时候也想了一下,catch又有什么用呢?报错都已经报错了。也就是说在我这个应用里面,这种大图片就是处理不了。catch只是抓住了这个oom,但我并没有实际办法可以解决这个OOM.
  6. java 堆(heap先进先出)和栈(stack先进后出)
    堆内存:new一个对象或者创建一个数组
    堆heap内存占据了虚拟机的大部分内存空间,程序执行时产生的对象就分配在堆heap内存上。
    如果是堆heap内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。
    栈内存:基本类型的变量和对象的引用变量
    栈stack是存储方法调用的一片内存数据区。
  7. ANR Application Not Responding;也就是应用程序无响应
    InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件
    BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。
    Service Timeout :前台服务20秒内,后台服务在200秒内没有执行完毕。
    ContentProvider Timeout :ContentProvider的publish在10s内没进行完。
    解决办法
    尽量避免在主线程(UI线程)中作耗时操作。耗时的操作放在子线程。
    避免死锁的出现
    文件读写或数据库操作放在子线程异步操作。
  8. http协议
    get / post / put / delete
  9. 网络协议
    1.application layer
    http https
    2.transport layer
    TCP UDP
    3.network layer
    路由选择,堵塞控制
    4.link layer
    封装
    5.physic layer
  10. Android申请权限
    manifest里面加安全的权限
    不安全的权限看看有没有,没有问user要
  11. Activity 异常情况下的生命周期
    1.系统配置数据改变导致 Activity 销毁并重创:例如横竖屏的切换时
    2.资源内存不足,导致 优先级低的 Activity 被杀.但是Task 和 Activity 栈以及相应的 Intent 和数据会被系统保存起来,在应用程序被切回前台时,均会被恢复。
  12. 新的 Activity 执行完后需要返回到启动它的 Activity 来执行的回调函数
    startActivityResult()
  13. Android 常用控件
    TextView、按钮 Button、内容编辑 EditText、ImageView、进度条 ProgressBar、警告框 AlertDialog、进度提示框 ProgressDialog 等等
  14. Android布局和布局优化
    UI 卡顿产生原因:
    在 UI 线程中做了轻微的耗时操作;
    布局 Layout 过于复杂,无法在 16ms 内完成渲染;
    同一时间执行动画次数过多,导致 CPU 与 GPU 负载过重;
    View 频繁触发 Measure 与 Layout;
    频繁触发 GC 操作,导致线程暂停。
    UI 卡顿的优化策略:
    布局 Layout 优化;
    RecyclerView 优化;
    图片优化;
    避免 ANR。
  15. RecyclerView和ListView的区别
    ListView 的布局比较单一,只有一个纵向效果;
    RecyclerView 的布局效果丰富
    RecyclerView中可以实现局部刷新