![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android开发艺术探索
文章平均质量分 60
IT小后生
这个作者很懒,什么都没留下…
展开
-
第一章 Activity的生命周期和启动模式
1.1 Activity的生命周期全面分析典型情况下的生命周期:是指在有用户参与的情况下,Activity所经过的生命周期的改变; 异常情况下的生命周期:指Activity被系统回收或者由于当前设备的configuration(配置)发生改变导致Activity被销毁重建,异常情况下的生命周期和典型情况下的生命周期略有不同。1.1.1 典型情况下的生命周期分析Activity完...原创 2018-06-07 20:31:13 · 147 阅读 · 0 评论 -
第十四章 JNI 和 NDK编程
Java JNI的本意是Java Native Interface(java 本地接口),为了方便java调用C、C++等本地代码所封装的一层接口。Java的优点是跨平台,但是和本地交互的时候出现了短板,一些和操作系统相关的操作出现了短板。于是提供JNI专门用于和本地代码交互。通过Java JNI,用户可以调用C、C++所编写的本地代码。NDK 是Android所提供的一个工具集合,通过ND...原创 2018-06-07 20:33:22 · 204 阅读 · 0 评论 -
第十章 Android的消息机制
有时候需要在子线程中进行耗时的I/O操作,可能是读取文件或者是访问网络等,当耗时操作完成以后可能需要在UI上做一些改变,这时候就需要用Handler切换到主线程执行。MessageQueue 只是一个消息存储单元,不能处理消息,内部的存储结构是单链表。Looper 是消息循环,以无限循环的形式去查找是否有新消息,如果有的话就处理消息,否则就一直等着。ThreadLocal 可以在每个线程中...原创 2018-06-07 20:34:33 · 179 阅读 · 0 评论 -
第十二章 Bitmap 的加载和 Cache
Bitmap 的高效加载由于Bitmap的特殊性以及Android 对单个应用所施加的内存限制,比如16MB,这导致加载 Bitmap 的时候很容易出现内存溢出。加载图片:BitmapFactory 类提供了四类方法,decodeFile、decodeResource、decodeStream、decodeByteArray,分别用于支持从文件系统、资源、输入流以及字节数组中加载出一个Bi...原创 2018-06-07 20:33:51 · 169 阅读 · 0 评论 -
第十五章 Android 性能优化
内存泄漏分析值MAT工具MAT全称是Eclipse Memory Analyzer。 1. 打开DDMS界面,选中要分析的进程,然后单击 Dump HPROF file 按钮。可导出一个 hprof 后缀的文件 2. 导出的hprof文件不能被MAT直接识别,需要通过 hprof-conv 命令转换一下。( hprof-conv.exe 是Android SDK提供的工具,位于platfo...原创 2018-06-07 20:33:44 · 163 阅读 · 0 评论 -
第十一章 Android 的线程和线程池
线程分为主线程和子线程。主线程是指进程所拥有的线程(java 默认情况下一个进程只有一个线程,这个线程就是主线程),主要处理和界面相关的事情,子线程执行耗时操作,子线程也叫工作线程。AsyncThread封装了线程池和 Handler,主要是为了方便开发者在子线程中更新UI。HandlerThread是一种具有消息循环的线程,内部可以使用 Handler。IntentService是一个服...原创 2018-06-07 20:34:27 · 165 阅读 · 0 评论 -
Activity 的工作原理
ActivityActivity 组件是可以停止的,在实际开发中可以通过Activity的 finish() 来结束一个Activity的运行。Activity扮演者前台界面的角色。 startActivity 有好几种重载方式,但是最终调用startActivityForResult(). Service 的工作流程启动状态:用于执行后台计算,不需要和外界有直接的交互,尽管S...原创 2018-06-07 20:34:40 · 7171 阅读 · 1 评论 -
第五章 理解 RemoteViews
RemoteViews 表示的是一个 View 结构,可以在其他进程中显示,RemoteViews 提供了一组基础的操作用于跨进程更新它的界面。应用:通知栏和桌面小部件。5.1 RemoteViews 的应用通知栏主要是通过 NotificationManager 的 notify() 来实现的; 桌面小部件则是通过 AppWidgetProvider 来实现的,AppWidgetP...原创 2018-06-07 20:32:43 · 179 阅读 · 0 评论 -
四 View 的 measure 过程
如果 View 只是一个原始的 View,通过 measure 方法就可以完成测量过程;如果是一个 ViewGroup,会先对子元素进行 measure,然后测量 ViewGroup 自身。 1:View 的 measure 过程 (ViewGroup) measureChildren() -> (ViewGroup) measureChild -> (ViewGroup) chi...原创 2018-03-28 11:40:36 · 165 阅读 · 0 评论 -
八 Window的添加过程
Window 的添加过程是通过 WindowManager 的 addView 来实现的,WindowManager 是一个接口,实现类是WindowManagerImpl,因此直接看该类的addView(). @Override public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams p...原创 2018-06-07 20:32:58 · 212 阅读 · 0 评论 -
四 View 的测量宽高和最终宽高的区别
View 的测量宽高和最终宽高有什么区别?这个问题可以具体为getMeasuredHeight()和getHeight()有什么区别。 View public final int getHeight() { return mBottom - mTop; }再看看 mBottom 、mTop 是怎么来的: View protected ...原创 2018-03-28 15:25:56 · 314 阅读 · 0 评论 -
第八章 理解 Window 和 WindowManager
在桌面上需要展示一个类似悬浮窗的东西,需要使用到 Window 来实现。 Window 是一个抽象类,具体实现是 PhoneWindow。WindowManger 是外界访问 Window 的入口,Window的具体实现位于 WindowMangerService 中,WindowManager 和 WindowMangerService的交互是一个 IPC 过程。 Android 中的所有视...原创 2018-06-07 20:33:09 · 189 阅读 · 0 评论 -
第三章 View 的事件体系
3.1 View 基础知识View 是 Android 中所有空间的基类。 3.1 View 的位置参数 在 Android 中,x 轴和 y 轴的正方向分别为右和下。这些坐标相对于父容器来说的:top 是 view 左上角的纵坐标,left 是 view 的横坐标,right 是右下角横坐标,bottom 是右下角纵坐标;x 和 y 分别是 View 左上角的坐标;translation...原创 2018-06-07 20:32:10 · 148 阅读 · 0 评论 -
第二章 IPC机制
2.1 Android IPCIPC 为进程间通信或跨进程通信,是指两个进程数据交换的过程。 按照操作系统的描述,线程是CPU调度的最小单元,同时线程是一种有限的系统资源;而进程一般是指一个执行单元,在pc和移动设备上指一个程序或者一个应用。 多进程的情况: 1:一个应用因为某些原因自身需要采用多进程模式来实现,原因有很多:有些模块由于特殊原因需要运行在单独的进程(音乐播放器);webV...原创 2018-06-07 20:31:35 · 278 阅读 · 0 评论 -
第四章 View 的工作原理
4.3 View 的工作流程4.3.1 measure 过程 1. View 的 measure 过程 View 的measure()是一个 final 类型的方法,不能被重写,其中调用了 View 的 onMeasure(), https://blog.csdn.net/ghdsq/article/details/797144654.3.2 measure 的总结 mea...原创 2018-06-07 20:32:28 · 139 阅读 · 0 评论