最近项目需要涉及 Windows 桌面以及后端程序开发,趁着年底不是很忙,抽空复习了下 C# 基础知识,其中很多东西是和 Java 类似的,学习理解起来并不困难。
我的 2018
年纪越大,感觉时间过得越快,要不是翻看手机相册,都不知道这一年是怎么过的。
今年印象深刻的几件事
- 年初苏城的一场大雪,上次经历这么大的雪好像还是 2008 高三那一年,一晃 10 年了哟。
- 4 月部门团建去了浙江开化,欣赏了一望无际的油菜花,也吃到了当地特色名菜清水鱼,舟车劳顿,晚上约了个同事去捏脚,第二天爬山轻轻松松。
- 今年和几个朋友组织了几次野钓,收获满满,乐趣无穷。
- 因公司项目研发需要,年中的时候去郑州出差了两次,完整体验了 120 急救流程,看到了危急的心脏病患者,也看到了溺水奄奄一息的少女,不禁感慨生命的可贵。
- 今年加了一次薪,虽然不多,但遇到了一帮靠谱的队友,团队协作,轻松高效。有的时候,钱固然重要,但干得开心也很重要。
- 最后,今年最最激动和开心的就是老婆圣诞节送我的大礼了,哈哈哈!
Android 性能优化
前几年,Google 发布了关于 Android 性能优化典范的系列专题,帮助开发者创建更快更优秀的 Android App。课程专题不仅仅介绍了 Android 系统中有关性能问题的底层工作原理,同时也介绍了如何通过工具来找出性能问题以及提升性能的建议。
JNI 和 NDK 编程
JNI 全称 Java Native Interface,它是为了方便 Java 调用 C、C++ 等本地代码所封装的一层接口。
NDK 是 Android 所提供的一个工具集合,通过 NDK 可以在 Android 中更加方便的用过 JNI 来访问本地代码。此外 NDK 还提供了交叉编译器,只需简单的配置即可生成特定 CPU 平台的动态库。
Android 的线程和线程池
在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生,并且线程的创建和销毁都会有相应的开销。在 Android 中除了 Thread 以外,还有 AsyncTask、IntentService 以及 HandlerThread 都扮演着线程的角色。
Android 的消息机制
Android 的消息机制主要是指 Handler 的运行机制,Handler 的运行需要底层的 MessageQueue 和 Looper 来支持。
MessageQueue 是一个消息的存储单元,Looper 以无限循环的形式去查找是否有新的消息,有的话就处理,没有就一直等待。Looper 中有一个特殊的概念 - ThreadLocal
线程默认是没有 Looper 的,如果需要使用 Handler 就必须为线程创建 Looper。Android 主线程也叫 UI 线程,确切的说应该是 ActivityThread,其被创建时就会初始化 Looper,这就是主线程默认可以使用 Handler 的原因。
理解 Window 和 WindowManager
Window 是一个抽象类,它的具体实现是 PhoneWindow。可以通过 WindowManager 创建 Window。Android 中所有视图都是附加在 Window 上的,因此 Window 实际上是 View 的直接管理者。