技术文章整理 + 心得

来源:互联网 发布:中国网络明星于凯微博 编辑:程序博客网 时间:2024/06/06 01:24

Android Studio 调试

断点调试
http://blog.csdn.net/yy1300326388/article/details/46501871

  1. 其中的“跨断点调试”应为“恢复项目”;
  2. 学会灵活运用“设置变量的值”功能;

TraceView 性能分析
https://bxbxbai.github.io/2014/10/25/use-trace-view/

  1. 最重要的两个参数是 Calls + Recur Calls / Total 和 Cpu Time / Call;
  2. 在开始追踪的地方加入 Debug.startMethodTracing(“name”);,在停止追踪的地方加入 Debug.stopMethodTracing();,即可生成用于 TraceView 分析的 debug 文件;

Android 新特性

Android 8 新特性
https://zhuanlan.zhihu.com/p/26409511

通知渠道,画中画模式,自适应图标,固定快捷方式和小部件….

Android 性能

Android 中 RelativeLayout 和 LinearLayout 的性能分析
http://www.jianshu.com/p/8a7d059da746

  1. RelativeLayout 默认执行两次 onMeasure:因为 View 有可能在横纵方向存在交叉引用(A 横方向依赖 B,B 纵方向依赖 A);
  2. LinearLayout 默认执行一次 onMeasure;如果使用 weight 属性,则执行两次 onMeasure,即非 weight 属性先 onMeasure 一次,剩下的长度再分配给 weight 属性;
  3. 尽量使用 padding 代替 margin;
  4. 复杂的 View 嵌套结构对性能的影响更大;

Android 代码质量

SonarQube
https://www.sonarqube.org/

代码质量管理平台;

Android 插件化

Android 插件化入门
http://www.jianshu.com/p/b6d0586aab9f

Android 插件化的作用:

  1. 解决方法数超过65535的问题;
  2. 不同团队负责不同的插件,分工明确;
  3. 不同模块封装成不同的插件 APK,各个模块可以单独编译,提高开发效率;
  4. 通过上线新的插件解决线上 bug,实现“热修复”;
  5. 减小宿主 APK 的体积;

Android Web

Android 代码混淆
https://www.cnblogs.com/renhui/p/5863199.html
http://www.cnblogs.com/renhui/p/5910300.html(Java Annotation)

使用 Js 的 WebView 都要进行代码混淆;

Android 开发技巧

获取当前 Activity 实例对象
http://blog.csdn.net/vfush/article/details/51483436

  1. 在 MyApplication 内声明公有静态 Activity 对象 sCurrentFrontActivity;
  2. 在 MyApplication 内重写 onCreate 方法,实现 ActivityLifecycleCallbacks 接口,在 onActivityCreated 和 onActivityResumed 方法中为 sCurrentFrontActivity 赋值为参数 activity;
  3. 使用时,判断 (MyApplication.sCurrentFrontActivity instanceof 某个 Activity),reture true 则当前 Activity 为那个 Activity;
    (不一定是最好的解决方案!)

Android 屏幕适配:最全面的解决方案
https://www.jianshu.com/p/ec5a1a30694b

仅收藏,暂无研究的动力;

Android 常见错误

java.util.ConcurrentModificationException
http://blog.csdn.net/aaawqqq/article/details/43884623

出现原因:集合在被迭代器迭代的同时被修改;
解决方法:
1. 迭代时用锁;
2. 先复制,再迭代;
3. Android 使用 CopyOnWriteArrayList;

Android 源码

深入理解 Looper,Handler,Message
http://blog.csdn.net/lmj623565791/article/details/38377229
http://blog.csdn.net/shaoenxiao/article/details/54561753
异步消息处理机制

软引用 弱引用 ReferenceQueue WeakHashMap

Java 四种引用介绍
https://www.cnblogs.com/dolphin0520/p/3784171.html

  1. 软引用很适合做缓存;
  2. 与 ReferenceQueue 联用时,ReferenceQueue.poll 拿到的是引用,此时调用该引用的 get 方法返回 null(对象将要被回收);
  3. 调用 System.gc 无法保证 JVM 立即执行垃圾回收;

ReferenceQueue 介绍
https://www.cnblogs.com/dreamroute/p/5029899.html
(读到 WeakHashMap 之前)

  1. 例子中的 referenceQueue.remove 改为 referenceQueue.poll,去掉 thread.setDaemon(true),System.out.println(“map.size->” + map.size()) 移到子线程的最后;

WeakHashMap 介绍
https://www.cnblogs.com/skywang12345/p/3311092.html

  1. 我的理解:HashMap.put 直接将 key 的引用存进键中,WeakHashMap.put 为 key 对象新增一条弱引用,并将弱引用存进键中,如图:

WeakHashMap 介绍

轮子:SoftMap
http://blog.csdn.net/lovoo/article/details/51302594

指针和引用

C++ 中指针和引用的区别
https://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html
(只读1.(1))

  1. 我的理解(以 Java 为例):
Integer i = new Integer(1);

此时内存栈中存放着引用 i,堆中存放着 Integer 对象 1:
指针 是堆中 Integer 对象 1 在内存中的地址,
引用 是栈中引用 i 或 i 的别名;

内部类

普通内部类和静态内部类的区别
http://blog.csdn.net/u012123938/article/details/46684839

  1. 普通内部类持有对外部类的强引用;静态内部类则没有,可以使用软引用或弱引用访问外部类(Android handler 内存泄漏:链接);
  2. 普通内部类不能持有静态成员;

Java 语法

普通代码块,构造代码块,静态代码块
https://www.cnblogs.com/sophine/p/3531282.html

  1. 三种代码块均没有方法名,注意各自的位置和关键词;

  2. 普通代码块功能与一般大括号相同;
    构造代码块每次初始化类时都运行一次;
    静态代码块只在 JVM 初次加载类时运行一次;

Java 多线程

Java 实现超时监听
http://blog.csdn.net/dailywater/article/details/19771689

方案1:使用守护线程;
方案2:使用 Future 特性(推荐);

Condition
http://blog.csdn.net/ghsau/article/details/7481142

传统的 notify() 不能指定唤醒哪一个 wait(),而 Condition 的 await() 可以唤醒特定的 signal();

网络

HTTP 1.0/1.1/2.0
http://www.jianshu.com/p/52d86558ca57

原创粉丝点击