自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络优化-HttpDns

问题:DNS 解析慢/被劫持?使用 HTTPDSN,HTTPDNS 不是使用 DNS 协议,向 DNS 服务器传统的 53 端口发送请求,而是使用 HTTP 协议向 DSN 服务器的 80 端口发送请求。HTTPDNS 优势1、绕过运营商域名解析的过程,避免 Local DNS 的劫持。 2、降低平均访问时延,提供连接成功率。 3、HTTPDNS 服务器会增加流量调度、网络拨测/灰度、网络容灾等功能。HTTPDNS在Android网络架构的位置及实践目前我们App的Android网络流

2021-09-16 15:44:08 374

转载 深入学习Android性能优化

1.深入探索Android稳定性优化2.深入探索Android启动优化(上)深入探索Android启动速度优化(下)

2021-03-17 10:56:06 235

原创 Flutter renderflex溢出

初学Flutter写界面时遇到几次像素溢出,在网上寻找解决办法大致有以下几种:1.Expanded包装一下比如原来代码body: new Column( children: <Widget>[ Text('1111111'), Text('22222222222222222222222'),// 这里可能会溢出 ], )修改后 body: new Column( child.

2020-08-27 16:19:21 568

原创 Flutter动画

Flutter中动画抽象Flutter中也对动画进行了抽象,主要涉及Animation、Curve、Controller、Tween这四个角色,它们一起配合来完成一个完整动画,下面我们一一来介绍它们。AnimationAnimation是一个抽象类,它本身和UI渲染没有任何关系,而它主要的功能是保存动画的插值和状态;其中一个比较常用的Animation类是Animation<double>。Animation对象是一个在一段时间内依次生成一个区间(Tween)之间值的类。Animat

2020-07-30 16:42:25 195

转载 Flutter异步

Flutter默认是单线程任务处理的,如果不开启新的线程,任务默认在主线程中处理。事件队列在Dart的线程中也存在事件循环和消息队列的概念,但在Dart中线程叫做isolate。应用程序启动后,开始执行main函数并运行main isolate。每个isolate包含一个事件循环以及两个事件队列,event loop事件循环,以及event queue和microtask queue事件队列,event和microtask队列有点类似iOS的source0和source1。event que

2020-06-17 17:13:05 1322

原创 锁和线程同步

最近一直很忙,好长时间没有更新博客了,实在惭愧!从春节到现在将近两个月了,我们的生活一直被疫情笼罩真的是举步维艰。这样的环境下好多公司被迫裁员、甚至破产、下岗失业接踵而来,互联网行业变得更加艰难。我们真的没有办法没有退路,只有努力才可能杀出一条血路!今天梳理一下java中的锁和线程同步相关知识:1.锁的分类 公平锁/非公平锁 可重入锁 独享锁/共享锁...

2020-03-22 19:20:37 100

原创 Binder原理系列

一直关注皇叔,他的分享干货满满,写的博客条理清晰对framework层原理分析的很是透彻,适合大家学习。下面推荐几篇皇叔的Binder原理系列文章:刘望舒Binder系列下面从概述->Java层Binder->Native层Binder->Binder驱动大致流程进行分析Binder原理:1.Linux的IPC通信原理用户空间需要访问内核空间,就需要借助系统调用来...

2019-11-12 10:26:24 532 1

转载 Android UI卡顿监测框架BlockCanary原理分析

BlockCanary是国内开发者MarkZhai开发的一套性能监控组件,它对主线程操作进行了完全透明的监控,并能输出有效的信息,帮助开发分析、定位到问题所在,迅速优化应用。其特点有:非侵入式,简单的两行就打开监控,不需要到处打点,破坏代码优雅性。 精准,输出的信息可以帮助定位到问题所在(精确到行),不需要像Logcat一样,慢慢去找。 目前包括了核心监控输出文件,以及UI显示卡顿信息...

2019-09-27 15:30:04 298

转载 Android 性能优化总结

App 流畅运行,是用户体验的第一步。App 流程运行,涉及到性能优化,主要涉及到布局优化, 绘制优化,内存泄漏优化,响应速度优化,列表展示优化,Bitmap 优化,线程优化,包大小优化。布局优化布局优化的思路是减少布局层次。 同等层次的情况下,能使用 LinearLayout 和 FrameLayout 实现的效果,不用 ReleativeLayout 。 布局复杂的情况,使用 L...

2019-09-27 15:27:42 144

原创 SharedPreferences剖析

本文目录:写在前面 获取 SharedPreferences 实例 加载 xml 数据文件 初次读取数据的耗时分析 commit 和 apply 的对比写在前面SharedPreferences 平时用来持久化一些基本数据类型或者一些可序列化的对象。根据我们日常的经常,持久化操作是耗时的,涉及到文件的 IO 操作,但是实际使用 SharedPreferences 时,发现只有...

2019-07-12 16:42:34 191

转载 Android H5秒开方案调研—今日头条H5秒开方案详解

本文对Android H5秒开方案进行了调研,对今日头条App的秒开方案进行了详细分析。本文首发:http://yuweiguocn.github.io/背景在回家的地铁上使用自家应用H5相关功能时,可能由于网络原因导致体验较差,在使用微信、今日头条App时,感觉很流畅,基本做到了秒开,然后就想了解下业内H5秒开方案。问题原因 文件下载耗时:包括html、css、js、图片等...

2019-06-21 20:53:21 1540

原创 MVVM实战

最近接受一个新项目,打算用一下Google jetpack推荐的架构(https://developer.android.google.cn/jetpack/docs/guide),如图所示:这种架构使用ViewModel+LiveData完全使View层和ViewModel层解耦,每层各司其职用起来非常的干净,它不像MVP模式下Presenter需要通过接口和View通信。ViewMod...

2019-06-03 21:01:13 459

转载 IdleHandler页面启动优化神器

随着App的开发到了某个阶段必然会遇到一个需求,那就是优化页面的启动时间。第一个问题:有什么方法可以去统计页面的启动时间呢?adb logcat -s ActivityManager | grep "Displayed"上面的命令行可用来进行查看。第二个问题:启动时间是包括了哪些流程,是如何被计算出来的呢?App启动主要经过如下几个流程Launch the proce...

2019-05-14 14:14:11 667

转载 LeakCanary原理解析

简介LeakCanary是一款开源的内存泄漏检查工具,在项目中,可以使用它来检测Activity是否能够被GC及时回收。github的地址为https://github.com/square/leakcanary使用方式解析将LeakCanary引入AS,在Application中调用如下方法,可以跟踪Activity是否被GC回收。入口函数LeakCanary.insta...

2019-05-14 14:11:09 298 1

原创 FFmpeg-基础知识点

1.FFmpeg常用结构体AVFormatContext 是一个贯穿始终的数据结构,很多函数都要用到它作为参数。它是FFMPEG解封装(flv,mp4,rmvb,avi)功能的结构体。AVInputFormat 输入数据的封装格式。AVStream是存储每一个视频/音频流信息的结构体。AVCodecContext 是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息...

2019-04-12 19:16:50 198

原创 Android音视频开发-基础知识点

从去年寒冬但现在纷纷有大厂爆出人员结构调整、末尾淘汰等等,近期身边想换工作的朋友同事都在抱怨面试要求高找工作难,想必大家都知道这是互联网的一次洗牌,资本寒冬只能导致优胜劣汰。在这个变脸的春天我们能做的只有不断的学习、不断的学习!目前安卓开发能走的两条路---大前端和底层框架ndk,我选择了后者,最近也一直在学习音视频开发,学习应该做到有输入有输出,我习惯于用博客巩固学过的知识。本...

2019-03-28 14:43:25 2447 4

转载 Android 音视频开发学习之路

Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。初级入门篇:Android 音视频开发(一) : 通过三种方式绘制图片 Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件 Android 音视频开发(三):使用 AudioTrack 播放PCM音...

2019-02-15 14:31:13 2116

原创 Android实现滑动的几种方法

下面通过一个例子来总结实现滑动的几种方式,例子的主要功能就是让我们的自定义View能够随着手指的移动而移动。布局文件如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orie...

2019-01-28 10:36:53 393

转载 Glide 缓存机制

Glide缓存分为 内存缓存 和 硬盘缓存。这两个缓存模块的作用各不相同,内存缓存 的主要作用是防止应用重复将图片数据读取到内存当中,而 硬盘缓存 的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。缓存key那么Glide的缓存Key是怎么生成的呢?我不得不说,Glide的缓存Key生成规则非常繁琐,决定缓存Key的参数竟然有10个之多。不过繁琐归繁琐,至少逻辑还是比较简单的,...

2019-01-22 15:57:15 7651 4

转载 Android HandlerThread与IntentService

HandlerThread本质上是一个线程类,它继承了Thread; HandlerThread有自己的内部Looper对象,可以进行looper循环; 通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务。 创建HandlerThread后必须先调用HandlerThread.start()方法,Thread会先调...

2019-01-22 15:23:50 362

原创 手写HashMap

最近跟一个朋友聊天,谈到去百度面试让手写HashMap,当时没思路面试就挂了。想到这里我打算巩固一下自己的基础知识,亲自动手实现一下HashMap.HashMap底层=数组+链表HashMap底层源码通过 链表法来解决hash冲突,找到hash值对应位置不为空,维护一个链表。实现如下:1.首先定义一个接口public interfaceERMap&lt;K,V&gt; {...

2019-01-06 20:04:36 344

转载 谈谈LruCache算法的底层实现原理及其内部源码

前言我们在对数据进行操作的时候,为了避免流量或者性能的消耗,我们对于一些数据都会进行缓存处理,而对数据的缓存的要点不仅仅只有我们所熟悉的存储缓存和使用缓存,还有删除缓存。对于添加和获取缓存很好理解,那么为什么还要对缓存进行删除呐?原因很简单,因为我们的手机容量是有限的,如果我们拼命的写入缓存,那么终有一天内存会满导致程序奔溃,这显然不是我们想要的结果,于是我们在写入缓存的时候并非无脑写入,而是...

2019-01-04 14:16:25 318

原创 ndk开发入门

时间过得真快,转眼间来京三年了,搬了几次家 换了两份工作 无数个到深夜的加班 从未有过的说走就走的旅行 这一路走来感觉真的很累。虽然一直在努力,仍然没能在国贸随便刷卡 更没有住进三环过上体面的生活。未来的路还很长,我相信终有一天会过上自己想要的生活。三年来学习的脚步从未停止,《安卓开发艺术探索》《安卓进阶之光》《安卓进阶解密》《设计模式》《数据结构和算法》等这些书读过不止一遍,收获还是蛮大的,...

2018-12-29 15:55:11 224

转载 安卓6.0到9.0适配

1.前言大家还记得Android 6.0权限适配的泪水吗?而现在谷歌已经出了Android P的稳定版,而且谷歌粑粑,为了大家能给辛苦熬夜加班,特地的和个大市场合作,要强制推出9.0的适配,而近期在下不才,为了报着多踩坑的心态,做了一下7.0~9.0的适配,脸颊也是老泪两行。 2.安卓6.0的适配2.1 怎么适配● 在6.0所有权限都需要申请?曰:当然不是。只有属于危险权限...

2018-12-17 16:36:41 351

原创 Rxjava线程切换原理

今天周六了,我想大家都出去玩了吧,但是据说帅的人都在家学习呢。哈哈哈昨天朋友面试被问Rxjava线程切换原理,当时有点蒙圈了,这里我写一篇博客讲一下。PS:建议您对 RxJava 有一些了解或使用经验再看此文章,推荐结合源码品尝RxJava入门文章【Rxjava详解】 [给 Android 开发者的 RxJava 详解-扔物线(http://gank.io/post/560e15be2d...

2018-12-15 09:57:23 4386 2

原创 Android热更新:Tinker与walle结合使用

最近项目上线,终于可以清闲一小段时间,但是为了提升技术总得给自己找点乐子干。(⊙v⊙)嗯,提升App逼格加个热更新吧!项目中原来是区分渠道标示打包的,加入热更新是否要打多个补丁包? 一开始先研究Tinker,其原理我想懂行的人都清楚,无非就是应用了类加载方案,如果想使用热更新强烈推荐Tinker接入指南。Tinker的使用方式如下,以gradle接入的release包为例:每次编译或...

2018-12-13 16:30:26 797 1

原创 安卓自定义View进阶-Path之贝塞尔曲线

一.Path常用方法表为了兼容性(偷懒) 本表格中去除了在API21(即安卓版本5.0)以上才添加的方法。忍不住吐槽一下,为啥看起来有些顺手就能写的重载方法要等到API21才添加上啊。宝宝此刻内心也是崩溃的。作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点...

2018-11-21 16:46:27 193

原创 安卓自定义View进阶-Path之基本操作

本文参考自定义View相关文章https://github.com/GcsSloop/AndroidNote一.Path常用方法表为了兼容性(偷懒) 本表格中去除了部分API21(即安卓版本5.0)以上才添加的方法。作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path...

2018-11-20 17:43:16 475

转载 Android 常用换肤方式以及原理分析-LayoutInflater.Factory

常用方法1.通过Theme切换主题通过在setContentView之前设置Theme实现主题切换。 在styles.xml定义一个夜间主题和白天主题:&lt;style name="LightTheme" parent="Theme.AppCompat.Light.DarkActionBar"&gt; &lt;item name="colorPrimary"&gt;@col...

2018-11-14 11:05:33 616

原创 自定义TextView 换行对齐

今天遇到一个关于TextView文字两端对齐其实方案,大家都知道原生控件是不能满足我们的需求的,因此需要自定义View。package com.example.VerticalMarqueeTextView.view;import android.content.Context;import android.graphics.Canvas;import android.graphic...

2018-09-20 11:56:43 945

原创 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)

带权图分为有向和无向,无向图的最短路径又叫做最小生成树,有prime算法和kruskal算法;有向图的最短路径算法有dijkstra算法和floyd算法。  生成树的概念:联通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树 生成树是联通图的极小连通子图。所谓极小是指:若在树中任意增加一条边,则 将出现一个回路;若去掉一条边,将会使之编程非连通图。生成树各边的权 值总和称为...

2018-09-19 20:49:22 305

原创 竖直滑动的RecyclerView嵌套竖直滑动的RecyclerView并解决滑动冲突

入职国美三个月了,进入大公司最大的感触就是人远比你自己想象的要强大!这一路走来实属不易,但给我带来的更多是成长。这里是人生的起点,也可以说是梦开始的地方,加油吧!项目中要求两个红框区域列表滑动时吸顶,头像部分超过四行可上下滑动。问题①两个区域吸顶实现:这个比较好实现,我是在页面根布局RelativeLayout中写了两个跟吸顶布局一样的View,然后通过监听RecyclerView滑动...

2018-09-08 11:01:37 11693 11

原创 性能优化---排查列表卡顿

一、前言如果现在用户反馈某个列表很卡,你会怎么排查问题?这样一个简短的问题,其实考察了我们多方面的知识。要答出其中的一两个小点其实并不难,难的是如何能够由外之内,由浅入深娓娓道来,它考察的是一个程序员发现问题、解决问题、归纳总结的能力。要回答这个问题,可以从以下四个方面层层深入,整个大纲如下:(1) 渲染原理 为什么会感知到卡顿 理解VSYNC (2) 卡顿的外部...

2018-08-28 16:42:03 1216

转载 Android插件化原理之Activity插件化

前言四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式,分别是反射实现、接口实现和Hook技术实现。反射实现会对性能有所影响,主流的插件化框架没有采用此方式,关于接口实现可以阅读dynamic-load-apk的源码,这里不做介绍,目前Hook技术实现是主流,因此本篇文章主要介绍Hook技术实现。Hook技术实现主要有两种...

2018-08-27 19:51:06 830

转载 Android插件化思考

最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内满足需求和项目的增长,同时又能快速响应问题和迭代新需求,这就是一个矛盾点。此时,插件化技术正好风生水起,去了解各个主流框架实现思路,看看能对目前工作是否有帮助,是很有必要的。主要分为以下几个部分来...

2018-08-27 15:05:06 168

转载 Android资源动态加载以及相关原理分析

思考一般情况下,我们在设计一个插件化框架的时候,要解决的无非是下面几个问题: 四大组件的动态注册 组件相关的类的加载 资源的动态加载 实际上从目前的主流插件化框架来看,都是满足了以上的特点,当然因为Activity是大家最常用到的,因此一些插件化框架便只考虑了对Activity的支持,比如Small框架,从原理上来看,基本都差不多,Hook了系统相关的API来接管...

2018-08-27 14:49:48 2424

转载 ARouter原理剖析和自己实现EasyRouter

前言路由跳转和组件化在项目中用了一段时间了,最近对Android中的ARouter路由原理也是研究了一番,于是就给大家分享一下自己的心得体会,并教大家如何实现一款简易的路由框架。本篇文章分为两个部分,第一部分着重剖析ARouter路由的原理,第二部分会带着大家仿照ARouter撸一个自己的路由框架,我们自己撸的路由框架可能没有Arouter众多的功能如过滤器、provider等,但是却实现了...

2018-08-17 14:46:39 6872 4

原创 Android代码、图片、布局、网络和电量优化

这篇文章分为五个部分代码优化、图片优化、布局优化、网络优化、电量优化,尽量每个方法都写了小的Demo! 代码优化:不要做多余的工作,尽量避免次数过多的内存的分配,(需要对api有一定的熟悉)数据集合的使用:建议最佳的做法是可能使用ArrayList作为首选,只要你需要使用额外的功能的时候,或者当程序性能由于经常从表的中间进行插入和删除而变差的时候,才会去选择LinkedList。H...

2018-08-03 11:14:20 843

转载 Lifecycle 的实现

Lifecycle 隶属于 Android 官方架构组件,它的实现跟 ViewModel 类似,都是利用 Fragment 来实现它的功能。通过添加一个 fragment 到 activity 中,这个 fragment 便能够接收到各个生命周期回调。使用方法简介这里我并不打算讲太多 lifecycle 的用法,不熟悉的同学,可以阅读这篇[1]。为了使用 lifecycle,首先需要获...

2018-07-30 11:07:53 930

原创 Android Hook 技术

1. 什么是 HookHook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而「钩子」的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。Hook 原理图Ho...

2018-07-25 15:48:44 545

空空如也

空空如也

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

TA关注的人

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