自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 跨平台技术篇 - Dart 语法全解析 (上)

学习 Flutter,必须得掌握 Dart 语言,这篇文章就来整理一下 Dart 的语法,由于内容较多,所以分成上下两篇。目录:Dart 简介 Dart 开发环境 注释 关键字 变量和常量 特殊数据类型 运算符 流程控制语句 异常1.Dart 简介Dart 是面向对象的、类定义的、单继承的语言。它的语法类似 C 语言,可以转译为 JavaSc...

2019-03-29 16:46:32 2609

原创 跨平台技术篇 - 尝试编写一个 Flutter app

现在来跟着编写一个简单的 Flutter app。目录:创建 Flutter app 使用外部包 (package) 添加一个有状态的部件 (Stateful widget) 创建一个无限滚动 ListView 添加交互 导航到新页面 使用主题更改 UI1.创建 Flutter app这一步可以参考上篇文章:跨平台技术篇 - Flutter 安装配...

2019-03-28 19:14:28 977

原创 跨平台技术篇 - Flutter 安装配置

这篇来写写 Flutter Android 版的安装配置,并运行一个demo。目录:系统要求 获取 Flutter SDK Android Studio 设置 运行 demo1.系统要求要安装并运行 Flutter,你的开发环境必须满足以下最低要求:操作系统: macOS (64-bit)。 磁盘空间: 700 MB (不包括 Xcode 或 A...

2019-03-28 17:06:36 2725 1

原创 跨平台技术篇 - Flutter 框架一览

近期开始学习 Flutter,先来了解一下 Flutter 的整体设计。Flutter 是一款移动应用 SDK,一份代码可以同时生成 Android 与 iOS 两个高性能,高保真的应用。Flutter 目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。兼容滚动行为、排版、图标等方面的差异。这是一个来自 Gallery的演示应用程序, 你可以在安装 Flutte...

2019-03-28 15:07:38 1253

原创 跨平台技术篇 - React Native 从入门到放弃

为什么要放弃学习 React Native 呢?先总结一下 React Native 的优缺点,再来说说原因。1. React Native 的优缺点目前有许多的跨平台框架,比如基于 WebView 的 Cordova、AppCan 等,使用 HTML+JavaScript 渲染成原生控件的 React Native、Weex,以及目前如日中天的 Flutter。基于 We...

2019-03-28 13:06:20 1542

原创 跨平台技术篇 - React Native 环境搭建与运行的坑

今天开始来写跨平台技术,比较有名的就是 Facebook 的 React Native 和Google 的 Flutter,目前 Flutter 正如日中天,因为体验更接近原生。先来几篇文章看看 React Native。目录:环境搭建 创建新应用 运行出现的问题1.环境搭建我的环境是 Mac os & Android,因为我电脑上已经安装了 J...

2019-03-27 18:33:51 2071

原创 Android应用篇 - app 架构设计的思考

对于 Android 客户端的架构设计,可以从分层化和模块化来考虑。目录:分层化 模块化 业务逻辑层设计1. 分层化在 Android 客户端开发中,通常可以分成以下几层:SDK层:主要是 Android SDK 及第三方的 SDK (可能基于 Android SDK 或为独立的 SDK),这些 SDK 为上层框架提供核心功能的支持。 基础框架层:...

2019-03-23 18:53:56 1474

原创 Android应用篇 - MVC、MVP 和 MVVM

前面写的设计模式篇是代码设计上的,而对于系统设计,也有不少的模式,比如 MVC、MVP、MVVM。众所周知,GoF 总结过23个设计模式,这23个设计模式是某些特定的编程问题的特效药,这是业内公认的。 而MVC | MVP | MVVM 是一种模式,但却在 GoF 总结出来的这个23个设计模式之外,确切的说它不是一种设计模式,它是多种设计模式的组合,并不仅仅只是一个单独的一个模式。...

2019-03-23 17:13:30 1672

原创 Android应用篇 - 利用 APT 实现 Android 编译时注解

这篇文章来说说 APT。目录:APT 概述 实现目标 项目框架 自定义注解模块 注解处理器模块 API 模块 项目中的使用1.APT 概述在前面的《Java篇 - 深入了解注解》一文中已经讲过,可以在运行时利用反射机制运行处理注解。其实还可以在编译时处理注解,这就不得不说 Java 官方为我们提供的注解处理工具 APT (Annotation Proce...

2019-03-23 13:00:58 1013

原创 Android应用篇 - 观察者、EventBus、本地广播的区别

这篇文章来分析下观察者、EventBus 和本地广播的区别。评价某种方式优劣,有很多种指标,包括空间、时间等性能因素,还有代码的复杂程度,同整个程序的相性等等。目录:本地广播 EventBus 观察者1. 本地广播优点:一般认为本地广播是三种方式中消耗时间、空间最多的一种方式,但也是同 Android 相对最好的方式。因为广播属于 Android 四大组...

2019-03-23 11:47:22 2259 1

原创 Android应用篇 - app 安全防护

这篇文章来总结下 Android app 的安全防护手段。目录:资源混淆 代码混淆 签名校验 反调试 组件安全 Webview 的代码执行漏洞 加固 编码安全 动态加载 hook 数据存储安全 数据传输安全 内存数据安全1.资源混淆资源混淆可以使用微信团队的AndResGuard,这样能保护我们设计师辛苦设计的成果。AndResGua...

2019-03-22 20:09:26 3227

原创 Android应用篇 - 最全图片相关的优化

今天来总结一下图片相关的优化手段。目录:基础知识 分辨率的优化 图片的格式 图片的压缩 JNI 调用 JPEG 库 图片的缓存 设置图片色彩模式 回收图片 OutOfMemory 能否被 catch inBitmap1.基础知识(1) decodeFile() 与 decodeResource() 内部调用了 decodeStream()。...

2019-03-22 18:20:14 936

原创 Android应用篇 - Animation 和 Animator

这篇文章来讲讲 Android 中的动画,Animation 和 Animator。目录:Animation Animator1.Animation1.1 简介Animation分为两种:Tween Animation (渐变动画):通过对场景里的对象不断做图像变换 (平移、缩放、旋转) 产生动画效果。 Frame Animation (帧动...

2019-03-22 14:48:37 1633

原创 Android应用篇 - UI 层级、过度绘制分析

过度绘制就是在同一个区域中叠加了多个控件,也就是说一个像素点上会出现多个像素的叠加,实际上呈现在我们眼前的只是最上面的一个,往往造成这种现象的原因是产品或者视觉过多繁琐的建议和交互,或者是开发人员自己不注意造成的。目录:如何分析过度绘制 如何解决过度绘制1.如何分析过度绘制通过打开开发者选项中的"显示 GPU 过度绘制" (设置/更多设置/开发者选项/调试 ...

2019-03-22 12:29:27 1546

原创 Android应用篇 - block 如何分析

今天来聊聊卡顿的问题,除了内存泄漏,页面的流畅度也非常重要。我目前使用的最流畅的 app 就是 Telegram 了。那么在 Android 中如何检测卡顿呢?目录:卡顿的原因 BlockCannary StrictMode1.卡顿的原因我总结了以下几点:在主线程处理耗时任务,比如处理 IO,操作数据库,数据计算等。 在主线程进行网络请求,当然在 A...

2019-03-21 19:41:07 2356

原创 Android应用篇 - 内存泄漏如何分析

今天来聊聊 Android 中的内存泄漏如何分析。目录:什么是内存泄漏 Android 中的内存泄漏场景 分析内存泄漏的几种方法 内存优化的一些点1. 什么是内存泄漏内存不在 gc掌控之内了,当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用,从而就导致该对象不能被回收。这种本该被回收的对象不能被回收而停留在内存中的现象...

2019-03-20 18:46:15 1241

原创 Android应用篇 - 打包流程分析

平时都是直接用 gradle 打包,今天来分析一下 Android 的打包流程。目录:流程图 具体步骤分析1.流程图2. 具体步骤分析打包的工具链:aapt -> aidl -> javac -> dx -> apkbuilder -> jarsigner -> zipalign现在来一步步...

2019-03-20 17:39:11 1225

原创 Android应用篇 - WebView 与 JS 全解与实战

这章来讲讲 Android 与 JS 的互相调用。目录:Android 调用 JS JS 调用 Android WebView 漏洞与内存泄漏 Dapp Brower1. Android 调用 JS1.1 方式Android 调用 JS 有两种方式:通过 WebView 的 loadUrl()。 通过 WebView 的 evaluateJa...

2019-03-20 15:31:55 1213 1

原创 Android应用篇 - RecyclerView 设计分析

RecyclerView 目前已成为 ListView,GridView 甚至HorizontalListView 的高阶替代品。最初从开源项目 Telegram 中就见到 RecyclerView 的影子,当时还惊讶于它的聊天列表怎么那么顺滑。而且目前 github 出现了越来越多的基于RecyclerView 的开源库,可见它的受欢迎程度。今天这篇文章就来分析一下 RecyclerVi...

2019-03-18 18:34:19 950

原创 Android应用篇 - ListView 设计分析

ListView 是 Android 常用的控件之一,其中Adapter 跟 AdapterView 之间就运用了经典的桥接模式。不过 ListView 也存在不少问题,例如局部刷新,整体的性能等,目前 RecycleView 已经成为主流。目录:ListView 的继承关系 Adapter 的作用 RecycleBin 的回收机制 源码分析1.ListV...

2019-03-18 12:04:50 1177

原创 Android应用篇 - 从源码角度来理解 View 的事件机制

关于 View,除了绘制,还有一个就是它的事件机制。写 View 事件的文章很多,我这边就不赘述了,直接讲重点。目录:流程图 源码分析1. 流程图在 Activity 中,当有一个事件来到的时候,会开始调用 Activity 的 dispatchTouchEvent() -> Window.dispatchTouchEvent() ->Decor...

2019-03-15 17:27:36 725

原创 Android应用篇 - 从源码角度来理解 View 的绘制流程

上一篇文章从几个场景分析了下 View 的绘制流程,这篇文章我们来 read the fuck code!本文源代码基于 Android 7.0。目录:handleResumeActivity() performTraversals() performMeasure() performLayout() performDraw()1.handleR...

2019-03-14 21:11:27 278

原创 Android应用篇 - 从不同场景来理解 View 的绘制流程

很多文章都讲解了 View 的绘制流程,今天我想换种方式,用例子来理解。目录:准备工作 单个 View 测试 ViewGroup + View 测试1.准备工作准备两个自定义 View,分别重写 TextView 和 LinearLayout:public class MyTextView extends TextView { publi...

2019-03-14 18:57:05 314

原创 Framework篇 - Dalvik VM、ART VM 和 JVM 的比较

今天来对比下与 Android 有关的3个虚拟机:JVM、Dalvik、ART。目录:JVM 简述 Dalvik 简述 ART 简述1. JVM 简述JVM 是Java Virtual Machine (Java虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java 语言...

2019-03-14 13:10:31 678

原创 Framework篇 - APK 安装流程简介

本文源代码基于 Android 7.0。在 Android 系统下,我们一般会使用 "adb install -r" 命令来安装应用,此时应用会被安装到 /data/app/ 下。这篇文章,我们就简要分析 PackageManagerService 安装 APK 的中间处理过程。目录:安装流程图 adb 方式安装 APK PackageManager 安装 APK...

2019-03-13 20:01:36 1726

原创 Framework篇 - PackageManagerService 启动分析

本文源代码基于 Android 7.0。/base/services/java/com/android/server/SystemServer.java /base/services/core/java/com/android/server/pm/PackageManagerService.java /base/services/core/java/com/android/serv...

2019-03-13 18:02:50 906

原创 Framework篇 - InputManagerSerice 分析整理

本文源代码基于 Android 7.0。/base/services/core/java/com/android/server/input/InputManagerService.java (IMS) /base/services/core/java/com/android/server/wm/WindowManagerService.java (WMS) /base/servic...

2019-03-13 15:06:04 437

原创 Framework篇 - 系统服务的注册方式

本文源代码基于 Android 7.0。有两种不同的方式来注册系统服务:ServiceManager.addService() SystemServiceManager.startService()这两种方式最终都是向 service manager 进程注册 Binder 服务,但是在功能上有区别,下面从代码角度来分析。1.ServiceManager.a...

2019-03-12 20:08:14 677

原创 Framework篇 - 从 WindowManageService 的角度来分析 Activity 的窗口

本文源代码基于 Android 7.0。/base/services/core/java/com/android/server/am/ActivityStack.java /base/services/core/java/com/android/server/wm/WindowManagerService.java /base/services/core/java/com/andro...

2019-03-12 18:26:21 447

原创 Framework篇 - 一文搞懂 Activity、View、Window、ViewRootImpl

本文源代码基于 Android 7.0。前面的文章讲解了 startActivity 的过程:Framework篇 - startActivity 启动过程,那么 Activity、Window、View 和 ViewRootImpl 它们之间到底是一个怎么样的关系呢?目录:Window 的创建过程 关系图 getWindowManager().addView(...

2019-03-12 15:34:57 948

原创 Framework篇 - Application 的创建过程分析

本文源代码基于 Android 7.0。system 进程和 app 进程都运行着一个或多个 app,每个 app 都会有一个对应的 Application 对象 (该对象和LoadedApk 一一对应)。今天就来分析一下 Application 的创建过程,其实前面的文章已经有大体讲过,这边单独抽出一章来系统讲解下。目录:system_server 进程创建 Appl...

2019-03-11 22:31:26 583

原创 Framework篇 - startService 启动过程

本文源代码基于 Android 7.0。这篇文章来分析一下 startService() 的启动过程,相对于 startActivity() 要简单的多。目录:发起端进程 system server 进程 目标进程 总结1.Context/base/core/java/android/app/ContextImpl.java启动服务调用的...

2019-03-11 18:58:22 894 1

原创 Framework篇 - startActivity 启动过程

本文源代码基于 Android 7.0。今天来分析一下 startActivity 的启动过程。1. Activity/base/core/java/android/app/Activity.java @Override public void startActivity(Intent intent) { this.start...

2019-03-11 17:27:02 711

原创 Framework篇 - 进程的生命周期与优先级

目录:进程的生命周期 Lowmemorykiller 进程的优先级1.进程的生命周期Android 系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入"重要性层次结构"中。必要时,系统会首先消除重要性最低的进程,然后是清除...

2019-03-08 19:16:35 676

原创 Framework篇 - 四大组件与进程启动的关系

本文源代码基于 Android 7.0。一个进程里可以运行多个 app,一个 app 也可以运行在多个进程中,通过配置 Android:process 属性来决定。进程对 Android 来说非常重要,承载着 Android 的四大组件,影响着系统的正常运转。目录:四大组件与进程 进程启动的全过程 启动过程图1.四大组件与进程Activity, Serv...

2019-03-08 18:33:34 815

原创 Framework篇 - 杀进程和 forceStop 分析

前面介绍了进程创建的过程,今天来说一说 Android 中的杀进程和 forceStop,forceStop 对应中文就是"强行停止"。杀进程 forceStop1. 杀进程1.1 Process.killProcess()杀进程从Process.killProcess() 开始,那么就以它作为入口。/base/core/java/android/os...

2019-03-07 21:03:34 6171 3

原创 Framework篇 - Hook 技术实战

目录:Hook 介绍 Hook 原理 Hook demo Hook 框架1.Hook 介绍Hook 翻译过来就是"钩子"的意思,那在什么时候使用 Hook呢?在 Android 操作系统中系统维护着一套自己的事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而 Hook的意思,就是在事件传送到终点前截获并监控事件...

2019-03-06 19:14:58 1330 1

原创 Framework篇 - framework 层的 crash 处理流程

本文源代码基于 Android 7.0。App crash (全称 Application crash),对于 crash 可分为 native crash 和 framework crash (包含 app crash 在内),对于 crash 相信很多 app 开发者都会遇到,那么上层什么时候会出现 crash 呢,系统又是如何处理 crash 的呢?例如,在 app 中大家经...

2019-03-06 16:35:05 1432 2

原创 Framework篇 - ANR 原理分析

本文源代码基于 Android 7.0。这篇文章来分析一下 Android 中 ANR 的原理。目录:ANR 简介 Service ANR 分析 如何避免 ANR1.ANR 简介ANR (Application Not responding),是指应用程序未响应,Android 系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有...

2019-03-06 15:14:40 611

原创 Framework篇 - SystemServer 进程详解

本文源代码基于 Android 7.0。SystemServer 由 Zygote fork 生成,进程名为 system_server,该进程承载着 Framework 的核心服务。关于 Zygote 的启动流程,到 SystemServer 的启动入口,可以参考这篇文章:Framework篇 - zygote 进程分析目录:SystemServer 进程创建流程 S...

2019-03-05 19:08:02 980

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除