1基础
智能指针
(1)用来解决C++指针存在的问题,如没有初始化、忘记delete、野指针。(2)对象A指向对象B,B的引用计数器mCount会加1,当不引用时,会减1,如果刚好为零,则删除对象B。(3)强引用和弱引用的区别,弱引用必须先升级为强引用才可以访问指向的目标对象,弱引用的主要使命就是解决循环引用的问题。(4)通常目标对象的父类是 RefBase ,这个类可以同时进行强弱引用的控制。
binder 机制
intent
Android中有四大组件来构成Android程序,Intent是Android程序中三大组件(活动,广播,服务)之间传递消息的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件间传递数据,(使用隐式Intent,不仅可以启动自己程序内的活动,而且还可以启动其他程序的活动)。Intent一般可被用于启动活动、启动服务以及发送广播等场景,这是Intent重要的几个用途。因此,Intent起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)。为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。
见:https://www.cnblogs.com/engine1984/p/4146621.html,https://www.cnblogs.com/X-knight/p/5438042.html
序列化
Android序列化有两种:Serializable 和 Parcelable
Serializable是Java的序列化方法,Parcelable是Android的序列化方法。前者代码量少(仅一句),将整个对象转换,I/O开销较大,一般用于输出到磁盘或网卡;后者使用起来比较麻烦,将整个对象进行分解,效率高,一般用户内存间序列化和反序列化传输。
推荐使用Parcelable方法。
屏幕的适配
2系统
线程
Android提供了四种常用的操作多线程的方式,分别是:
1. Handler,见:理解Android的handler机制--从应用到原理再到实践
2. AsyncTask
3. ThreadPoolExecutor
4. IntentService 为了能够控制Service的生命周期,Android官方推荐的最佳解决方案就是使用IntentService,这种Service的最大特点就是当后台任务执行结束后会自动停止,从而极大程度上避免了Service内存泄漏的可能性。
详细介绍:https://www.jianshu.com/p/2b634a7c49ec
定时器
定时器有三种:
java 提供的 Timer类:不太适用那些需要长时间在后台运用的定时任务。原因是,Android手机在长时间不操作的情况下,CPU会自动进入睡眠状态,这有可能导致Timer中的定时任务无法正常执行。
Alarm机制:具有唤醒CPU的功能。
Doze模式:(1)在Android6.0系统中引入,为解决后台服务泛滥、手机电量消耗过快的问题。(2)在屏幕关闭一段时间后(且没有接通电源),就睡进入Doze模式。在Doze模式下,系统会CPU、网络等活动限制,但系统不是一直处于Doze模式,会间歇性的退出Doze模式一小段时间,此时去完成同步操作。
进程间通信
有以下几种:Bundle/Intent、共享文件、Messenger、AIDL、ContentProvider、Socket、Broadcast
https://blog.youkuaiyun.com/gs344937933/article/details/82938047
四大组件
分别为:Activity、BroadCast、Content Provider、Service
https://blog.youkuaiyun.com/gs344937933/article/details/82932958
六大布局
分别为:线性布局(LinearLayout)、框架布局(FrameLayout)、表格布局(TableLayout)、相对布局(RelativeLayout)、绝对布局(AbsoluteLayout)和网格布局(GridLayout)
https://blog.youkuaiyun.com/gs344937933/article/details/82934418
五大存储
分别为:SharedPreferences、文件存储、SqLite、Content provider、网络
https://blog.youkuaiyun.com/gs344937933/article/details/82934670
进阶
虚拟机
JVM、DVM(Dalvik VM)和ART虚拟机对比:
https://www.cnblogs.com/qitian1/p/6461541.html
https://blog.youkuaiyun.com/evan_man/article/details/52414390
Application启动流程分析:
https://www.jianshu.com/p/a5532ecc8377
内存优化
合理管理内存,https://blog.youkuaiyun.com/guolin_blog/article/details/42238627,该文章介绍在使用内存时,哪些方法可以减少内存
分析内存的使用情况,https://blog.youkuaiyun.com/guolin_blog/article/details/42238633,该文章介绍了DDMS、MAT工具分析内存泄漏
编码细小优化:https://blog.youkuaiyun.com/guolin_blog/article/details/42318689,
加载图片优化,有两方法,一种是将大图片压缩后显示,一种是使用内存缓存技术,详见郭霖:https://blog.youkuaiyun.com/guolin_blog/article/details/9316683
LeakCanary Android 和 Java 内存泄露检测。https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/
这篇文章更详细: http://hukai.me/android-performance-patterns-season-3/
布局优化
见:https://blog.youkuaiyun.com/guolin_blog/article/details/43376527
OOM
OOM(out of memory 内存溢出),见:https://www.jianshu.com/p/f5d8d3066b36
http://hukai.me/android-performance-oom/
ANR
在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。
见:https://www.jianshu.com/p/6d855e984b99
自定义View
https://blog.youkuaiyun.com/gs344937933/article/details/84262641
常用第三方库
图片加载:Glide: https://blog.youkuaiyun.com/column/details/15318.html, https://www.jianshu.com/p/3d699bf007c7
数据库框架:LitePal
网络通信库:OkHttp
OkHttp的加强版:retrofit:https://www.jianshu.com/p/0fda3132cf98
EventBus
Rxjava
网络编程
Android的网络编程是基于 java 的 socket 的,所以应该先学习 java 的 socket ,参见文章:Android网络编程之--Socket编程
设计模式
建造者模式和工厂模式的区别:https://www.cnblogs.com/ChinaHook/p/7471470.html
模板设计:https://blog.youkuaiyun.com/guolin_blog/article/details/8744002
单例模式:https://blog.youkuaiyun.com/guolin_blog/article/details/8860649
策略模式:https://blog.youkuaiyun.com/guolin_blog/article/details/8986285
组合模式:https://blog.youkuaiyun.com/guolin_blog/article/details/9153753
适配器模式:https://blog.youkuaiyun.com/guolin_blog/article/details/9400141