Song Blog

Move, move.

多线程相关面试题

线程安全面试

什么是进程? 是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。 什么是线程? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 进程和线程的区别? 进程和线程的主要差...

MarkDown To PDF

最方便的Markdown转PDF流程

简介 Markdown 转 PDF 有很多方案,但是操作最方便且支持配置最多还是 Pandoc。Pandoc 不能直接转 PDF,需要通过LaTeX转为 PDF,LaTeX引擎的样式配置比较麻烦,且对中文的支持不好,所以最终选用 Markdown 转 HTML,再 HTML 转 PDF。HTML 转 PDF 有很多方案,比如 wkhtmltopdf、markdown-pdf、prince、w...

移动端CI&CD方案探索

Jenkins & fastlane 部署 CI\CD 流程

概念 持续集成指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。 持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。持续交付可以看作持续集...

Android 的线程和线程池

全面了解线程池

主线程->界面相关;子线程->耗时操作; AsyncTask底层是线程池;IntentService/HandlerThread底层是线程;HandlerThread是具有消息循环的线程,内部可以使用handler; IntentService是一个服务,内部采用HandlerThread来执行任务,完成后会自动退出,很像后台线程,但由于是服务 存活率高 频繁创建...

Android 的消息机制

全面了解 Handler

Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层MessageQueue和Looper的支撑。MessageQueue是采用单链表的数据结构来存储消息列表。 Looper会以无限循环的形式去查看是否有新消息,如果有就处理消息,否则就一直等待。ThreadLocal可以在不同线程中互不干扰的存储并提供数据,通过ThreadLocal可以轻松的获取每个线程的...

理解 Window 和 WindowManager

全面了解 Window

Window 和 WindowManager Window表示的是一个窗口的概念,创建一个Window很简单,只需要WindowManager去实现 WindowManager是外界访问Window的入口,Window的具体实现是在WindowManagerService中,他们两个的交互是一个IPC的过程 Android中的所有视图都是通过Window来实现的,无论是Acti...

Android 动画深入分析

全面了解 Android 动画

View 动画 View 动画种类 目前 Android 应用框架支持的补间动画效果有以下5种。具体实现在 android.view.animation 类库中。 AlphaAnimation:透明度动画,对应 <alpha> 标签。 TranslateAnimation:平移动画,需要指定移动点的开始和结束坐标,对应 <translate> 标签。 S...

Android 的 Drawable

全面了解 Drawable

Drawable 简介 表示图像的概念,可以 XML 定义,也可以使用代码创建 Drawable 对象。Drawable 可以通过 getIntrinsicWidth 和 getIntrinsicHeight 获取内部宽高,但并不是所有的 Drawable 都有内部宽高,如 BitmapDrawable 的内部宽高就是图片的宽高,再比如 ShapeDrawable 就没有内部宽高。 Dra...

View 的工作原理

全面了解 View 的工作原理

初识 ViewRoot 和 DecorView ViewRoot对应于ViewRootImpl类,是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewR...

View 的事件体系

全面了解事件分发

View 基础知识 View 的位置参数 View 的位置由其四个顶点决定,分别对应 View 四个属性:left、right、top、bottom,其中 top 是左上角纵坐标,left 是左上角横坐标,right 是右下角横坐标,bottom 是右下角纵坐标。注意这些坐标都是相对 View 父容器来说的,因此是一种相对坐标。 View 的宽高和坐标关系 1 2 width = rig...