Android 基础

Android 五大布局介绍
https://www.jianshu.com/p/4fac6304d872
FrameLayout,LinearLayout,RelativeLayout,TableLayout,AbsoluteLayout(弃)

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

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

漏洞:startForeground() 前台 Service 去掉通知显示
http://blog.csdn.net/wxx614817/article/details/50669420

Android 7.0 已经修复该漏洞;

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
技术文章整理 + 心得_第1张图片

Android 生命周期 & 适合执行的操作
http://blog.csdn.net/samuel__liu/article/details/51049579

  1. A Activity 中启动 B Activity,生命周期的执行顺序:
    A Activity -> onPause();
    B Activity -> onCreate();
    B Activity -> onStart();
    B Activity -> onResume();
    A Activity -> onStop();
  2. onCreate() 中建议进行 setContentView(),findViewById() 等初始化操作
  3. onResume() 可以进行耗时操作,但不是 Activity 可交互最好的指示器,使用 onWindowFocusChanged() 可以更清楚知道 Activity 的交互情况;
  4. onPause() 不能进行耗时操作(如果执行时间超过 500ms,Activity 将会被强制关闭),但是需要执行如停止动画等消耗 CPU 的操作,以便下一个 Activity 更快执行;或执行关闭独立设备(如照相机)的操作;
  5. onStop() 可以进行耗时操作,因为它是在后台执行;然而,如果内存不足,系统可能回收此进程,onStop() 可能永远不会执行;

Activity 与 Fragment 生命周期比较
技术文章整理 + 心得_第2张图片

Android 架构

Android MVP 讲解(晓鹏)
https://rocko.xyz/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/

MVP 对应于 Android:
M:Model,V:Activity,P:Presenter
其中,Activity 持有 Presenter 的引用,Presenter 持有 Model 和 Activity 的引用;

Android MVP demo
https://github.com/iGuure/AndroidCodeHub/tree/master/AndroidArchitecture

软引用 弱引用 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 对象新增一条弱引用,并将弱引用存进键中,如图:

技术文章整理 + 心得_第3张图片

轮子: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 特性(推荐);

// Android 范例代码ExecutorService executorService = Executors.newCachedThreadPool();Future future = executorService.submit(new TimerTask());try {    future.get(5000, TimeUnit.MILLISECONDS);} catch (InterruptedException e) {    e.printStackTrace();} catch (ExecutionException e) {    e.printStackTrace();} catch (TimeoutException e) {    Log.d("Guu", "Time out!");    e.printStackTrace();}Log.d("Guu", "Finish future task!");class TimerTask implements Callable<String> {    @Override    public String call() throws Exception {        Thread.sleep(10000);        return null;    }}

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

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

Volatile
https://www.cnblogs.com/zhengbin/p/5654805.html

Volatile 的作用:
1. 保证变量对所有线程的可见性;
2. 禁止指令重排列(保证 Volatile 前后的语句相对位置不变);

网络

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

其他

Json 相较于 XML 的优势
https://www.zhihu.com/question/25636060

更多相关文章

  1. 转:在Eclipse中查看Android SDK的源代码
  2. 使用Java代码在应用层获取Android系统属性
  3. Android Studio 插件之 Android ButterKnife Zelezny
  4. android源代码分布结构
  5. android 程序开发的插件化 模块化方法 之一
  6. 最全最好用的Android Studio插件整理
  7. android日历多选 日历插件

随机推荐

  1. Android线程池的使用
  2. MTK Android(安卓)编译环境搭建总结
  3. 从Android模拟器sdcard中导出文件
  4. 关于 Android(安卓)opencv 屏幕方向的bug
  5. Android(安卓)ExpandableGridView的实现
  6. viewpage setOnPageChangeListener 监听
  7. Android组件详解—TextView
  8. Android控制双击返回按钮退出程序的代码
  9. Android的开发环境搭建及新建工程
  10. Android(安卓)使用 Batterystats 和 Batt