Android
策码奔腾 叓
这个作者很懒,什么都没留下…
展开
-
仿饿了么添加购物车动画
0 效果效果图1 Item布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-au...原创 2019-01-18 19:49:23 · 597 阅读 · 0 评论 -
Launcher3桌面开发-Launcher3 抽屉型桌面改造成横屏桌面
Launcher3源码地址:Launcher3-master [This tutorial was written by Ticoo]Google Launcher3默认是抽屉型的桌面,到Android 8.0依然是没有这样的功能。这样的功能是手机厂商提供给我们的,不得不说,横向排列的桌面更适合国人的使用习惯,可能是使用iphone的习惯吧。好,那我们如何实现这样功能呢?其实并不会...原创 2019-01-24 17:08:56 · 987 阅读 · 0 评论 -
性能优化-Android ANR在线监控原理
Android中的Watchdog在Android中,Watchdog是用来监测关键服务是否发生了死锁,如果发生了死锁就kill进程,重启SystemServer Android的Watchdog是在SystemServer中进行初始化的,所以Watchdog是运行在SystemServer进程中 Watchdog是运行一个单独的线程中的,每次wait 30s之后就会发起一个监测行为,如果...原创 2019-01-24 17:10:40 · 393 阅读 · 0 评论 -
别再说互联网寒冬了,为何不从自己身上找找原因呢
前言最近一段时间,大家都在说一些大公司纷纷裁员, 优化公司内部的组织架构。面对如此的寒冬变化,很多人在迷茫,在焦虑,在担忧自己以后的人生道路,那么,我们作为开发者怎么样才能正确面对?具体应该怎么去做呢?受众多粉丝的要求,希望可以谈谈我的看法,那这篇文章给大家分享一下。 一、每年公司都会有裁员的事情发生,为什么今年让大家如此关注?个人认为,不管出于什么样的原因,我们都要以正确...原创 2019-01-24 17:12:24 · 787 阅读 · 0 评论 -
手写Handler架构
在了解Handler原理的同时可以翻看源码研究一下Handler架构,下面是本人手写的Handler架构Message.javapublic class Message { int what; Handler target;}Message类我写的很简单,源码中是有很多代码的,这里能够传递值的参数只有what。target对象主要是为了最终能够执行到handl...原创 2019-01-24 17:14:39 · 221 阅读 · 0 评论 -
Android 仿美团拖拽效果
如上图,实现了拖拽事件的无缝过渡。效果很流畅很自然,之所以写轮子因为实在找不到好用的库,该库参考了https://github.com/woxingxiao/SlidingUpPanelLayout ,其实在大神的开源库里就有Issues提到内嵌 scrollView 时滑动冲突的问题。再加上最近项目里面的详情页就有这样的拖拽效果需求,只好自己实现一遍。在实现的过程中,就遇到几...原创 2019-01-24 17:22:30 · 600 阅读 · 1 评论 -
DialogFragment使用到源码完全解析
前言最近项目中用到了DialogFragment,用起来很方便,但是坑比较多,于是自己研究了下源码,理清楚DialogFragment中Dialog和Fragment的关系,以及DialogFragment的原理。DialogFragment的使用方法1、重写onCreateDialog方法创建AlertDialog1.1 简单的AlertDialogpublic class FireM...原创 2019-01-15 15:38:33 · 213 阅读 · 0 评论 -
插件化-解决插件资源ID与宿主资源ID冲突的问题
为什么会冲突?为什么要解决资源id冲突?首先宿主apk和插件apk是两个不同的apk,他们在编译时都会产生自己的resources.arsc。即他们是两个独立的编译过程。那么它们的resources.arsc中的资源id必定是有相同的情况。这就会出现问题了:我们前面已经了解过,宿主在加载插件的资源的时候其实是新new了一个Resources,这个新的Resources是包含宿主和插件的资源...原创 2019-01-25 19:56:47 · 3202 阅读 · 0 评论 -
Android性能优化建议
磁盘SharedPreferences我们知道SharedPreferences底层是使用xml文件来实现的。所以对于SharedPreferences的操作其实是I/O操作,是耗时操作。commit每一次commit的调用都会对应一次文件的打开和关闭。commit是同步操作,apply是异步操作。最佳实践减少commit的次数; 在一个逻辑操作(方法)中不要多次com...原创 2019-01-25 19:57:56 · 251 阅读 · 0 评论 -
从源码了解BroadcastReceiver的工作过程
这篇文章本来应该是继续看VirtualApk中关于插件BroadcastReceiver的处理的。不过由于处理逻辑比较简单(在加载插件的时候把插件的所有BroadcastReceiver转为动态广播并注册),所以这里就不看了。本文就从Android源码(8.0)来看一下系统对BroadcastReceiver的处理逻辑(广播接收者注册、发送广播),BroadcastReceiver的源码...原创 2019-01-25 20:04:48 · 225 阅读 · 0 评论 -
插件化-插件Service的运行管理
在继续看VirtualApk中如何启动一个插件的Service之前,先简单的看一下Android如何启动一个Service, 主要是有个印象。下面的源码参考自Android8.0。 贴的源码只是包含一些关键点。Service启动的大体流程我们从ContextImpl.startService()开始看。 为什么从这里开始看呢? 如果你看过前面的文章插件Activity的启动, 你应...原创 2019-01-25 20:07:43 · 212 阅读 · 0 评论 -
插件化-插件Activity的启动
在上一节分析中,我们已经知道宿主已经加载了插件的资源、类。也就是说在宿主中是可以使用插件中的类的。但是对于启动Activity这件事就比较特殊了:在Android中一个Activity必须在AndroidManifest.xml中注册才可以被启动,可是很明显的是插件中的Activity是不可能提前在宿主的manifest文件中注册的。也就是说直接在宿主中启动一个插件的Acitvity必定失败。...原创 2019-01-25 20:10:18 · 225 阅读 · 0 评论 -
Android自定义view之实现带checkbox的Snackbar
前言最近项目要求实现一个类似于snackbar功能,但是又不完全是snackbar的插件,本来想在Google提供的snackbar里面进行更改,但是这样太麻烦了,于是自己动手实现了一个snackbar。先看下效果图: 1.要解决的问题1.弹框里面除了文字提示之外还有一个按钮,这个按钮是一个checkbox,分为选择状态和非选择状态。 2.弹框底部还有一个布局,弹框要在底...原创 2019-01-15 20:08:49 · 451 阅读 · 0 评论 -
Android插件包换肤(高仿网易云音乐换肤)
高仿网易云音乐换肤,插件化下载皮肤包,无需Activity的重启直接实现无缝切换。先看看效果图: 先简单描述一下网易云音乐换肤的大体过程:1.先去下载一个主题包,这个主题包其实是一个apk文件,里面包含要换皮肤的资源文件2.通过AssetManager,通过反射以及PackageName,获取到下载下来皮肤包的Resource,拿到Resource对象,...原创 2019-01-21 14:51:31 · 249 阅读 · 0 评论 -
Android中数据持久化
1、文件存储文件存储不会对存储的数据进行任何的格式化处理,所有数据都是原封不动的保存到文件中,适合存储一些简单的文本数据或二进制数据。Ⅰ文件写入openFileOutput() /** * 写入数据 */ private void writeData(String text){ FileOutputStream out = nu...原创 2019-01-21 15:13:14 · 206 阅读 · 1 评论 -
Android性能优化-图片篇
(1)drawable目录详解(mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi)1.1、图片在各个目录中要如何存放?(必须理解)android的drawable目录有:drawable-ldpi(低密度) drawable-mdpi(中等密度) drawable-hdpi(高密度) drawable-xhdpi(超高密度) drawable-xxhdpi(超超高密...原创 2019-01-21 15:16:03 · 138 阅读 · 0 评论 -
动画框架-直播间气泡效果
这个效果是之前看过的,正好是很典型的跟动画相关的例子,我这里就拿来跟大家分享一下,如果你以前看过又很熟悉动画那就可以略过,如果不是很熟悉或者没看过那不妨复习和学习一下,上图大家看下(好像转化成gif不是很完全): 想要源代码的可以加群853967238找群主获取,不过不熟悉的还是希望能自己敲敲。一.目标 今天这篇文章就是纯粹地使用一下属性动画,进而对前面源码分析的补充,所...原创 2019-01-21 15:22:13 · 768 阅读 · 0 评论 -
FrameWork层源码的分析-Google新组件下的架构思考
从谷歌发布新的框架组件,试用之后,不仅开始设想着改进之前的mvp模式架构,谷歌新框架新组件ViewModel,LiveData,Room,确实如谷歌所推荐的,从我感受来看,确实能省不少代码,代码也会比较优雅,包括加上前面的DataBinding,以及在mvp框架中用的流行框架rxjava,retrofit。那么我们就一起来封装下,当然大家可以改进,还是有很多空间的。下面我们看下下面的整体架构图片:...原创 2019-01-21 15:25:42 · 236 阅读 · 0 评论 -
Android应用瘦身,从18MB到12.5MB
开篇语前阵子老大交给了我一个任务,主要是帮我们开发的直播应用做 Android 端的安装包瘦身,花了大概一周的时间把安装包从 18MB 减小到了 12.5MB。原本完全可以优化到 10MB 之下,但由于其他原因的限制,所以目前阶段只到 12.5MB 为止。在此记录一下优化的思路和用到的工具,方便自己以后 Review ,有需要的童鞋也可供参考。瘦身的目的从目的导向来看,我们是不会无缘无...原创 2019-01-16 16:57:53 · 179 阅读 · 0 评论 -
Gradle插件、注解、javapoet和asm实战
实战库ImplLoader的介绍首先来介绍一下实战项目的所解决的问题 : 当一个Android工程中如果已经使用不同的module来做业务隔离。那我们就可能有这种需求,module1想实例化一个module2的类,一般要怎么解决呢?module1依赖module2 把module2的这个类沉到底层库,然后module1和module2都使用这个底层库。 ....等下面来介绍一个小库 ...原创 2019-01-27 19:57:37 · 661 阅读 · 0 评论 -
ARouter源码分析(1)-基本路由流程
文章是作者学习ARouter的源码的重点纪要。 ARouter官方文档 : https://github.com/alibaba/ARouter/blob/master/README_CN.md先通过一张图来了解ARouter的路由过程以及相关类:ARouter路由流程.png本文先不对路由表的生成做详细了解,也不对InterceptorService、GlobalDegrad...原创 2019-01-27 20:00:40 · 170 阅读 · 0 评论 -
Android Binder 机制
讲Android Binder机制的文章非常多,这篇文章主要是理一下我对Binder的理解。本文不是一篇介绍Binder的文章,也不是一篇探讨Binder实现的文章。本文会以AndroidStudio根据aidl接口自动产生的java文件来看Binder,进而来理解Binder机制。其实Android的Binder机制类似于:RPC(远程过程调用)。如果你理解它,相信Binder机制就更容...原创 2019-01-27 20:09:01 · 200 阅读 · 0 评论 -
插件化-插件APK的解析
本文主要来看一下在插件化技术中,实现宿主运行时使用插件apk类、资源等原理。(宿主即我们的主apk。插件apk即可以被加载的插件模块)。本文所谈的实现引用自: VirtualApk : https://github.com/didi/VirtualAPK另外欢迎关注我的Android进阶计划:https://github.com/SusionSuc/AdvancedAndroid, 好,开始:...原创 2019-01-27 20:12:17 · 299 阅读 · 0 评论 -
Android的UI显示原理之Surface的创建
本文是基于Google Android Repo中的较新的源码分析的。Android UI渲染这一块变化还是比较大的,逻辑可能和网上大部分文章有一些出入。在本文正式开始之前,我们先来了解一下与SurfaceFlinger相关的基础知识:与SurfaceFlinger相关的基础知识SurfaceFlinger可以说是Android UI渲染体系的核心,在Android系统启动时会启动Sur...原创 2019-01-27 20:14:41 · 439 阅读 · 0 评论 -
性能优化(11)-AndroidGodEye解析之流畅度(sm)
一.从Looper开始说起 如果要详细的讲解可以参考Handler,MessageQueue,与Looper三者关系分析,Looper是给线程提供处理消息能力的类,在Android Framework启动的时候,就会创建一个Main Looper即主线程对应的Looper,Looper中会维护一个MessageQueue,负责接收Handler发送过来的消息,MessageQueue是个消息队...原创 2019-01-22 16:01:14 · 728 阅读 · 0 评论 -
一种非常好用的Android屏幕适配
前言网上关于屏幕适配的文章已经铺天盖地了,为什么我还要讲?因为网上现在基本都是使用 屏幕分辨率限定符 进行适配,即每种屏幕分辨率的设备需要定义一套 dimens.xml 文件。由于不同分辨率的设备太多了,而且有些设备还有虚拟按键(例如华为手机),这样就还需要每个有虚拟按键的设备加多一套 dimens.xml 文件,再加上平板那些你会发现 dimens.xml 文件所占的体积已经超过2M了!这绝...原创 2019-01-16 17:47:51 · 139 阅读 · 0 评论 -
FrameWork层源码的分析-热修复框架AndFix完全解析
框架地址:AndFix在线源码查看:AndroidXRef 我们前面讲了插件化的框架,今天我们来讲讲我们的热修复框架,首先在选热修复框架的时候有犹豫过,到底是要讲美团的robust,微信的Tinker,还是阿里的AndFix等等那么这里用一张图来做一个开始:热修复框架对比 这里是缺少了美团的robust,还有阿里的最新热修复框架Sophix(这个框架也有借鉴了AndFix...原创 2019-01-22 16:26:51 · 190 阅读 · 0 评论 -
Launcher3桌面开发-Launcher3 添加主题功能
Launcher3源码地址:Launcher3-master [This tutorial was written by Ticoo]前言我们知道,Launcher图标的加载是在 IconCache 这个类上,协同一些工具类完成桌面图标的加载,源码里并没有主题功能的设计。所以在这里介绍一下主题设计的简单开发。主题的构思要添加主题功能我们得了解图标的加载,缓存等机制。还有,调研...原创 2019-01-22 16:34:10 · 874 阅读 · 0 评论 -
FrameWork源码解析-插件化框架VirtualApk之Service管理
框架地址:VirtualApk在线源码查看:AndroidXRef关于滴滴插件化框架VirtualApk我们已经讲了有几篇了:1)插件化框架VirtualApk之初始化2)插件化框架VirtualApk之插件加载3)插件化框架VirtualApk之Activity启动这篇我们紧接着前面开始讲,我们知道启动服务有两种方式startService和bindService两种方式,我们...原创 2019-01-22 16:44:22 · 266 阅读 · 0 评论 -
Groovy-程序结构
这章将会覆盖所有Groovy编程语言中的程序结构。1.3.1包名包名和java中的包名用法是一样的,它允许我们对代码进行分包而不会有冲突。Groovy 必须在类定义之前明确它的包名,不然就会使用默认包名。定义包的方式和java一样:// defining a package named com.yoursitepackage com.yoursite想要引用com.your...原创 2019-01-22 16:46:09 · 265 阅读 · 0 评论 -
WMRouter源码分析(1)-基本结构分析
本文整理一下WMRouter的基本路由逻辑,并剖析相关路由类的设计。基本元素先来简单理解一下WMRouter路由过程中的几个基本构成元素 :UriRequest : 封装了一个路由请求UriInterceptor : 代表一个拦截器,可以对一个UriRequest进行拦截,通过UriCallback来告诉拦截结果。UriCallback : Uri处理的一个统一回调。 回调它的...原创 2019-01-28 15:05:39 · 191 阅读 · 0 评论 -
WMRouter源码分析(2)-路由节点的动态生成
上一节我们分析了WMRouter的基本路由架构,并且我们知道了路由的起点是DefaultRootUriHandler,DefaultRootUriHandler含有许多子UriHandler。UriAnnotationHandler就是其中之一。按照前面的分析,一个UriHandler会处理一个Uri。一般一个app的Uri(页面)都非常多,那么这么多的UriHandler是什么时候生成的? ...原创 2019-01-28 15:15:31 · 270 阅读 · 0 评论 -
WMRouter源码分析(3)-路由节点的动态加载
上一篇文章我们了解到:框架会在编译时动态扫描@RouterUri注解并生成注册UriHandl到UriAnnotationHandler中的代码。那这些代码在运行时如何调用呢?先了解一下ServiceLoader这个概念。WMRouter中的ServiceLoader类似于java spiServiceLoader它的基本功能是:保存接口与实现类的对应关系。 这个关系是一对多。...原创 2019-01-28 15:16:42 · 383 阅读 · 0 评论 -
WMRouter源码分析(4)-页面路由实例分析
前面的文章我们大致了解了WMRouter的实现原理,本文就找一个具体的实例来看一下对于一个Activity页面的导航是如何实现的。Activity的路由首先我们使用@RouterUri标记一个Activity可被路由:@RouterUri(path = {DemoConstant.JUMP_ACTIVITY_1, DemoConstant.JUMP_ACTIVITY_2})pu...原创 2019-01-28 15:17:40 · 211 阅读 · 0 评论 -
Android Architecture Component之LiveData解析
HeaderAndroid Architecture Component 是 Google 在 2017 年推出的一套帮助开发者解决 Android 架构设计的方案。里面有众多吸引人的亮点,比如 Lifecycle、ViewModel 和 LiveData 等组件的设计,确实是一款牛逼的架构。相信很多同学都用过这个架构了,在这就不多介绍了。今天就给大家来解析一下其中的 LiveData 是...原创 2019-01-28 15:21:19 · 141 阅读 · 0 评论 -
Launcher3桌面开发(5)-Launcher3 负一屏的定制开发
Launcher3源码地址:Launcher3-master [This tutorial was written by Ticoo]左一屏可能有的小伙伴不清楚什么是左一屏,或者是负一屏。以我的了解,在智能手机还没有普及的时候,最早的左一屏的概念是来自Apple 苹果电脑的dashboard操作面板,如下图 后来iphone手机沿用了Mac的概念,相对PC而言,手机上的d...原创 2019-01-23 15:02:56 · 1532 阅读 · 0 评论 -
FrameWork源码解析-插件化框架VirtualApk之插件加载
框架地址:VirtualApk在线源码查看:AndroidXRef上一篇文章插件化框架VirtualApk之初始化我们已经讲了框架初始化的内容,主要就是hook Instrumentation类和hook AMS系统服务。今天这篇就是加载插件apk的内容,是插件化非常重要的一步,废话不多说,直接开写。。。一.插件加载在宿主工程初始化之后,我们就要加载插件工程了,还是从用法下手:...原创 2019-01-23 15:05:04 · 166 阅读 · 0 评论 -
网络编程(1)-TCP问题分析
TCP问题分析网络的五层协议物理层 数据链路层 网络层,IP协议,ICMP协议(ping) 传输层,传输层有两个协议,面向连接的TCP和无连接的UDP,TCP是点对点的可靠连接,保证数据顺序必达,UDP是无连接的,不保证数据顺序必达,UDP的传输效率要比TCP高,但是可能会丢包,而且一个UDP分段最多只能发送65535个字节,TCP则是数据流的形式进行数据传输的,对于应用层来说,并没...原创 2019-01-23 15:07:46 · 217 阅读 · 0 评论 -
ActivityRouter源码解析
Header在如今的 Android 组件化开发中,一款好的路由框架是不可或缺的。比如目前阿里的 ARouter 、美团的 WMRouter 等。路由框架可以降低 Activity 之间的耦合,从而在不需要关心目标 Activity 的具体实现类, 利用协议完成跳转。ActivityRouter使用方法在AndroidManifest.xml配置<activity ...原创 2019-01-29 16:37:05 · 477 阅读 · 0 评论 -
ARouter源码解析(一)
前言之前对 ActivityRouter 的源码做了一次分析,相信大家对路由框架已经有一个大概的理解了。而今天给大家分析一下 ARouter 。大家在项目组件化的过程中,可能绝大多数的开发者都会使用 ARouter 来作为项目的路由框架。毕竟 ARouter 是阿里出品,优点自然不必多说了。所以在平常使用的过程中,不仅仅要做到会用,还要深入了解一下 ARouter 的内部原理。本次...原创 2019-01-29 16:38:01 · 237 阅读 · 0 评论