<commit_before><commit_msg>添加Android群英传神兵利器总结<commit_after>---
layout: 	post
title: 	Android群英传神兵利器总结
subtitle: 	"Android群英传神兵利器总结"
date:       2016-09-20
author:     "晓晨DEV"
header-img: "img/post-bg-default1.png"
tags:
 - Android
 - Java

---


> 拿到书后先，看了下目录感觉自己绝大部分的知识点覆盖到了，但是阅读完才发现里讲的很多知识自己其实是没有深入理解的，最近自己确实是心情不好有些浮躁，检讨检讨，本文记录get到的知识点。

# 第一章

* 搭建开发者论坛可以考虑使用NodeBB
* GEEK PPT 可以使用（impress.js、strut、reveal.js）
* 搭建项目文档可以考虑使用MkDocs、RanetoDocs

# 第二章

这一章唯一不熟悉的就是tag

* `git tag -a v1 -m “version1” b687b06 ` -a tag名 -m 描述
* `git push origin version1` 本地tag推送
* `git push origin --tags` 本地全部tag推送

# 第三章

这一章关于 Android Studio 快捷键的地方我觉得写得挺失败的，关键点在于很多地方直接使用了Android Studio  默认快捷键书中说使用什么什么快捷键（例如 Command + J ）怎样怎样，但是对于我以 eclipse 快捷键为基础来使用 Android Studio 的人很多地方读起来一脸懵逼啊，如果把每个快捷键都带上在 keymap 里的名称就好了，准备自己写一篇。

还是有自己没有覆盖到的知识点的：

* 两下 shift -> search anywhere
* view -> enter presentation mode 进入演示模式
* 注意使用日志断点和异常断点
* 代码提示可以用 tab 补全，区别是是否删除后面的
* reveal in finder ，在finder中打开

# 第四章

第四章主要讲解gradle，因为自己对gradle还算熟悉本章就不做记录了，之后要尝试使用 Grovvy 语言写一个Android插件。

# 第五章

### AAPT（Android Asset Packaging Tool）

```
./aapt l <APK Path>    //列出apk内容
./aapt d [--values] <APK PATH>  //查看apk信息

```

AAPT 源码位于/frameworks/base/tools/aapt 目录下

### dumpsys

`adb dumpsys`查看系统的状态信息，可查看如下值：

  * Activity
  * cpuinfo  ---- cpu信息    
  * meminfo ---- 内存信息
  * package ---- package信息
  * window ---- 窗口信息
  * statusbar ---- 状态栏
  * battery/batteryinfo  ---- 显示电池/使用信息
  * alarm ---- 显示alarm信息

可以使用`adb dumpsys -h ` 进行学习

### Logcat

* `adb logcat -s xys` tag过滤
* -f 保存到文件

### Hierarchy Viewer

1. 只允许在模拟器或者工程机上使用，其他版本可以使用 https://github.com/romainguy/ViewServer。

2. 也可以使用UI Automator Viewer 来分析布局。

3. Hierarchy Viewer 可以把 View 保存为PNG，或者图片格式。

# 第六章

全书我收获最多的一章，非常好！！！

1. Android系统对于UI的提升：
  * 在Android 2.3版本，所有绘图由GPU完成 --- 软解时代
  * 在Android 2.3之后，系统增加了GPU，同时把很多绘图工作交给GPU进行渲染 --- 硬解时代
  * 在Android 4.1之后，Google 发布了 “Project Butter” ，通过VSYNC垂直同步机制和多级缓存机制（three frame buffer）进一步提高绘制效率 --- 黄油时代
  * 在Android 5.0之后，系统增加了Render Thread。通过这个线程进行异步绘制，即使某一帧发生延迟也不会影响下一帧 --- 异步绘制时代

2. RelativeLayout 的性能不一定优于LinearLayout：
RelativeLayout 通常可以减少布局的深度，但是在进行测量时候可能会进行多次测量，而 LinearLayout 只有在使用 weight 属性的时候会进行2此测量。

3. 使用 Trace for OpenGL
DDMS 中的工具可以跟踪每一帧的绘制。

4. 使用 SysTrace 来进行性能检测
  * 除了在 DDMS 中还可以在命令行中吊起 `$ python systrace.py --time=10 -o mytrace.html sched gfx view wm`
  * 在Android 4.3 之后可以使用系统提供的 Trace 类来增加自定义Tag
  
5. 使用TraceView
  * 通过TraceView可以得到单次执行最耗时的方法、知道执行次数最多的方法

6. 内存类型：
  
  * VSS （Virtual Set Size）虚拟耗用内存 （包含共享库所占内存）
  * RSS （Resident Set Size）实际使用物理内存 （包含共享库所占内存）
  * PSS （Proportional Set Size）实际使用物理内存（比例分配共享库所占内存）
  * USS （Unique Set Size）进程独自占用物理内存（不包含共享库内存）
  一般 VSS >= RSS >= PSS >= USS
  共享内存是，Android基础公共库、组件、还有一些native library使用的内存，被所用进程共享。进程都是从Zygote进程fork出来的，新进程产生的时候就带有了 Shared 内存从而提高进程创建速度。

7. GC系统：
* 2.3 之前 GC 是同步发生的，是完整的 Heap 遍历。GC会打断应用的正常运行。
* 2.3 之后 GC 是并发运行，GC 不会遍历 Heap 只是遍历一部分，但是多次 GC 后会产生内存碎片，一个连续的区域变小，可能会发生OOM。
* 5.0 对 GC 进行了改进，加快了GC的清理速度，减少打断。GC 不仅清理，还会为大的对象分配地址，进行内存对齐

8. 使用ActivityManager.MemoryInfo 可以了解内存情况，使用Debug.MemorInfo可以获取进程内内存使用情况。

9. largehepe虽然可以增大使用内存，但是会减慢GC速度

10. 获取更多内存方式：
  * 子进程
  * 使用Native Heap
  * 使用 OpenGL -- OpenGl是将RAM的一部分作为显存使用，很多图像 APK 会把图片转为Texture来处理
  * largeheap

11. 除了复写组件的 onLowMemory 来监听，也可以Context.registerComponentCallbacks(ComponentCallbacks callbacks) 就可以在任何地方监听

12. onTrimMemory的警告级别
  * 运行时 -- APP还能继续执行，APP处于前台
      * TRIM_MEMORY_RUNNING_MODERATE 第一级警告，系统即将准备执行LMK（低内存管理系统）
      * TRIM_MEMORY_RUNNING_LOW 第二级警告，内存接近LMK阈值
      * TRIM_MEMORY_RUNNING_CAITICAL 第三级警告，LMK能杀的background都杀了,马上要杀你了
  * 缓存时 -- APP 处于后台
      * TRIM_MEMORY_BACKGROUND LMK准备把你列为目标
      * TRIM_MEMORY_MODERATE LMK已经把你列为目标
      * TRIM_MEMOEY_COMPLETE LMK马上要杀你了
  * TRIM_MEMORY_UI_HISSEN -- UI元素被隐藏时候触发
可以使用`adb shell dumpsys gfxinfo packagename -cmd trim level` 模拟警告级别，数值可以再ComponentCallbacks2.java中查到。

13. 电量分析可以使用 https://github.com/google/battery-historian 

14. 综合测试工具：
* 网易Emmagee https://github.com/NetEase/Emmagee/
* 腾讯 GT https://github.com/TencentOpen/GT
* Google AnotherMonitor https://github.com/AntonioRedondo/AnotherMonitor

# 第七章

1. Google 搜索可以使用“+”、“-”、通配符、inurl：pdf、intitle等等。

2. Proguard自动生成  https://proguard.herokuapp.com/  

3. gitignore自动生成 https://www.gitignore.io/ 

4. gifgrabber mp4转gif软件

5. Android资源生成网站 http://romannurik.github.io/AndroidAssetStudio/

6. 在线shape生成 http://shapes.softartstudio.com/

7. icon资源：
  * 阿里icon仓库 http://iconfont.cn/
  * easyIcon http://www.easyicon.net/
  * https://icons8.com/
  
8. http://angrytools.com/ 设计合集

9. https://material.uplabs.com/
  
{'fraction_non_alphanumeric': 0.10550660792951543, 'fraction_numerical': 0.015418502202643172, 'mean_word_length': 4.304906542056075, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 11, 'https://': 9, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4888143', 'n_tokens_mistral': 2799, 'n_tokens_neox': 3077, 'n_words': 360}