- 博客(16)
- 资源 (17)
- 收藏
- 关注
原创 Android Jetpack 之 Navigation
1. Navigation 的定义Navigation 是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。导航组件由以下三个关键部分组成:导航图:在一个集中位置包含所有导航相关信息的 X...
2019-10-25 04:49:28 521
原创 Android Jetpack 之 DataBinding
1.DataBinding通过声明的方式,将 xml 布局中的组件与程序中的源数据进行绑定的框架库。当数据变化的同时组件能够及时同步并更新,减少Activity 中 View 的定义以及初始化,代码更加简洁。2.DataBinding 的使用2.1 在项目中对应 module 的 build.gradle 文件中添加 dataBinding 可用的配置:android { ...
2019-10-24 13:16:14 577
原创 Android Jetpack 之 LiveData
1. LiveData是什么LiveData is an observable data holder class. Unlike a regular observable, LiveData is lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, f...
2019-10-24 00:11:04 274
原创 Android Jetpack 之 LifeCycle
1. JetpackJetpack 是一套库、工具和指南的集合,并不是一个框架或者组件。Jetpack 包含与平台 API 解除捆绑的 androidx.*软件包库。Android Jetpack 组件是库的集合,这些库是为协同工作而构建的,不过也可以单独采用,可全部使用,也可混合搭配!Lifecycle 就是 Android Jetpack 组件之一。2.LifecycleL...
2019-10-24 00:09:46 441
原创 FFmpeg 的编译
之前在投简历很多公司都做短视频相关的,都要求懂FFmpeg,抖音真的带动了一大波短视频相关岗位哈。下面就记录下使用的相关步骤:1.编译环境用的是我买的一个阿里云。也可以在Windows下安装VMWare搭建虚拟机。可以参考我之前写的文章:VMware虚拟机搭建。2.准备 NDK下载:wget https://dl.google.com/android/repositor...
2019-10-20 18:30:32 1216
原创 Android 自定义控件:继承View
在自定义控件中,一种类型就是继承自 View,通过画笔,从无到有画出一个符合需求的控件。在工作中,相机模块中,需要做一个点击后的聚焦框,就是通过继承 View,从无到有画出来的。实现代码如下:package cn.zzw.customview.custom.view;import android.content.Context;import android.graphics.Can...
2019-10-19 22:43:22 395
原创 Android 系统启动流程(二)
1. 前言在Android 系统启动流程(一)中,描述了 Android 系统启动流程中从按下 Power 到 Zygote 进程的启动。最终 Zygote 启动了 SystemServer,并调用了 SystemServer 中的 main 方法,这里继续分析启动 SystemServer 后的流程。2.SystemServer 源码SystemServer 的入口为 main ...
2019-10-19 00:44:37 313
原创 Android 系统启动流程(一)
1. 前言看过很多关于 Android 系统启动流程的博客,对此都是半知半解。坚信只有自己将流程走一遍,才能有更进一步的认知,以及更深的理解。此篇文章算是自己在梳理 Android 系统启动流程所做的记录。由于自己对 C 以及 C++ 了解的不足,这里只从 Java 层开始追。此流程是基于 Android 9.0 的源码做出的记录,具体源码链接:http://androidxref.com/9...
2019-10-16 22:13:54 446
原创 Serializable 和 Parcelable 的用法和区别
1. Serializable 和 Parcelable 的用法Android 开发过程中,需要对对象进行存储和传递,而对于对象的存储传递就需要用到Serializable 和 Parcelable 对对象进行序列化和反序列化。1.1Serializable 的使用对象类实现Serializable 接口,并定义serialVersionUID:package cn.zz...
2019-10-15 20:38:38 285
原创 LruCache 源码解析
1. 概述对于Android 开发者,LruCache 肯定不陌生,几乎所有的图片缓存框架都会用到它来实现内存缓存等,可见LruCache 在 Android 开发中的重要性。LRU 是Least Recently Used 的缩写,近期最少使用的意思。当我们进行缓存的时候,如果缓存满了,会先淘汰使用最少的缓存对象。因为在 Android 中为每个APP分配的内存大小有限,而 LruCa...
2019-10-08 01:26:58 422
原创 LinkedHashMap 源码解析
1. 概述大部分的 Android 开发人员对LinkedHashMap 的认识,应该都是从 Lrucache 里面的来的吧。Lrucache 只所以实现开始访问排序,底层原理就是靠的LinkedHashMap。LinkedHashMap 的例子如下:package zzw.cn.testlinkedhashmap;import java.util.Iterator;impor...
2019-10-07 21:30:17 231
原创 Android 自定义控件:Path
在 Canvas 的学习中,只能画一些比较规则的图形,如方形,圆,弧线等。如果要画一些比较复杂的图形,只要计算好坐标,就需用到 Path 类就能做到,以及著名的贝塞尔曲线也是用 Path 来实现。这里列举下 Path 常用的方法。画笔等相关设置为: private void init() { mPaint = new Paint(); mPaint....
2019-10-05 21:01:09 249
原创 Android 自定义控件:Canvas
在 Android 自定义控件中,如果继承 View,需要进行绘图,就需要用到Canvas 。Canvas 称为画布,能够在上面绘制各种东西,是 Android 平台 2D 图形绘制的基础。当创建自定义View类时候,继承 View,就可以重写方法 onDraw(),在方法中的参数就是 Canvas 对象: @Override protected void onDraw(Ca...
2019-10-05 14:57:48 538
原创 Android 自定义控件:组合控件
自定义组合控件就是多个控件组合起来成为一个新的控件,用来解决多次重复的使用同一类型的布局,比如对话框、APP的标题栏等。这里列举一个最近项目开发中自定义的组合控件。先看做好的效果:自定义的选择按钮按钮选中的样式:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schema...
2019-10-02 23:50:48 354
原创 Android 全局异常处理
在 Android 开发中,谁都不想自己的 APP 出现异常,哪怕代码写得再好,也免不了出现异常的情况。而当出现异常后,要做的就是全局捕获异常以及将异常收集起来并且回传给服务端,方便对异常的解决。处理的方法:CrashHandler 类:package cn.zzw.crashdemo;import android.content.Context;import androi...
2019-10-02 22:01:34 295
原创 Android 热修复:阿里Sophix的集成
1. 前言当我们刚发布一个版本后,突然发现了一个严重的bug。由于刚发布版本,这时候如果再紧接着发布一个版本,这时候给用户的体验肯定很差。而热修复技术可以在用户不知道的情况下修复已知的bug。目前各大厂都推出了自己的热修复方案,各个方案的差别如下(这是阿里巴巴给的对比):热修复方案比较平台 阿里云移动热修复 Amigo(饿了吗) Tinker(微信) Qzone...
2019-10-01 18:45:41 674
ComponentDemo.zip
2020-05-22
Messenger示例代码
2019-06-26
AndroidAIDLDemo.zip
2019-06-19
Android Studio使用指南
2014-06-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人