- 博客(135)
- 资源 (25)
- 问答 (1)
- 收藏
- 关注
原创 SharePreference与MMKV对比
多进程时,需要解决数据同步的问题,采用文件互斥锁(同时只有一个线程拿到),而非pthead_mutex(Binder死亡通知方案-此通知不能自己处理,A、B进程互相注册对方死亡通知,A一直存在就有一个永久加锁的mutext,无法释放)。将一块物理内存(可随时读写的),通过文件操作符,同时映射到用户虚拟内存空间,和内核虚拟地址空间(struct vm_struct *area,属于逻辑地址,区别于物理地址,可通过转换器计算)的一段内存块(两者大小相同)。因此,加写锁时,需要先加写锁,再释放读锁;......
2022-08-04 03:32:00
2213
原创 再谈Android消息分发
线程内调用 Looper.prepare():创建自己的Looper对象和MessageQueue,新建Hander(Looper.myLooper)用于发送本线程的消息,通过Looper.loop来执行本线程消息分发,同时结束时执行Looper.myLooper().quit()退出当前线程,不然线程一直运行,这也是HandlerThread的使用原理。Handler消息分发,优化判断msg.callback是否为null,如果不是先执行它,再执行handlerMessage。..............
2022-08-03 17:25:45
1811
原创 Kotlin基础知识点
本文来自刘兆贤的博客_优快云博客-Java高级,Android旅行,Android基础领域博主,引用必须注明出处!Kotlin越来越流行,新的知识点和应用技巧,也十分吸引人,尤其是协程,其他还有规避回调的代码写法(类似RxJava)。下面是经典写法,比较符合kotlin语法class Test { public static long plus(int i1, int i2) { return i1 + i2; } publi...........
2022-05-13 23:48:53
1585
原创 四年直播小结
IPTV:Internet Protocol Television,交互式网络电视传输过程:将加密的视频以IP单播或组播的方式,发送给终端设备,通过DRM(Digital Rights Management数字版权管理)授权或密钥服务端,向终端传送授权或密钥,使终端能够解密视频,进行播放。视频方面:通过RTMP(Real Time Message Protocol ,TCP传输,效率低有延时但质量高,可以直接在网页端使用,需要CDN)或RTSP(UDP传输-亦可使用TCP拉流,效率高但会丢数据,适合
2022-04-28 21:06:52
6326
原创 Java基础之排序算法
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!新年第一篇,总结下基础的算法,包含二分排序、快速排序和分治排序1、分治排序,将数组分成一个个小数据块,每块小于3个元素,分别排序后再进行合并。 private int[] fenzhi(int[] attr) { if (attr.length > 2) { i.........
2021-01-12 17:09:28
1544
原创 LeetCode之两数相加、反转链表、少箭射球、二叉树
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!以前也有刷一些题目,但是没有记录,不方便回头看解题思路,今天开始就记录一下。452、https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/思路:先排序,以数列首个数字从小到大排列,使用低位和高位循环匹配,不符合的需要再用一支箭头即结果+1,于是解出此题。 public stat...........
2020-11-24 16:51:05
1267
原创 HashMap是如何实现的?
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!最近因XX需要,研究HashMap的内部实现,原因你懂的。经常三天时间,终于可以写下一些东西。数据结构:数组+链接。即每个数组中的单个元素,都是一个链表,该元素的下标由key的hash与数组长度决定,该链接的key的hash都相等。特点:它和HashTable大致相同(除了非线程安全和允许空键、空值),不保证排列顺序一直不变; 不要设置扩容因子过大......
2020-11-17 18:09:48
1334
原创 Mat监测内存泄露
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!Mat最早在Elicpse,到今未在AndroidStudio上,找到类似的功能,最近在排查内存泄露问题,因此又拿出来用了。步骤如下:1、将应用进程杀掉,以免出现数据冗余,影响出现实验结果2、将应用打开,到相关要实验的页面,模拟相关功能,测试相关流程,再关闭页面,重复几次。3、获取类GC数据的hprof文件,adb shell am dumph...
2020-06-28 20:19:36
2020
原创 Android初级第十讲之WebView的故事
Webview是谷歌提供一种加载网页的方式,随着H5的出现,越来越多的活动页面出现在Webview上,也出现React Native和Weex这样的H5框架。因此关于它,我们专门辟出来一节来讲讲。缓存模式(5种)LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。LOAD_CAC...
2019-11-25 10:29:07
1222
原创 Java高级之内存初始化时机
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!研究内存的初始化时机,有助于设计“降低应用内存消耗”方案!public class A { private Object mObject = new Object();// or static private st...
2019-06-19 15:24:36
2479
原创 Java高级之单例的合理用法
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!单例,目的是共用一份“类”的引用,去操作其内部业务;故单例,应该用于多线程。如果是单线程,建议直接使用“类”作成员变量,来操作其内部业务。优势:不需要多次初始化“类”对象,共用一份“类”的引用。劣势:使...
2019-06-18 21:50:54
1589
1
原创 Android动画实战
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!从表现形式来看,Android开发的功能,除了底层和基础的功能之外,剩下的就是炫酷功能的实现。底层功能通常用C语言使用、Java层调用,基本功能有各种各样的控件,而炫酷功能的实现,往往一千个设计师就会有一千种设计要求。动画包含Frame和Tween两种。Frame指(序列)帧动画...
2019-04-19 10:29:04
1623
原创 Android沉浸式的实现
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处! iOS上没有沉浸式的工作量,因为iPhone手机本身就自带此特性,Android去开发这个特性,工作量最终算下来,花了将近一周时间。 先理解一个概念fitsSystemWindow=true,表示把页面的背景推到状态栏...
2018-07-27 17:45:44
1274
原创 Android高级之WindowManager源码剖析
本文来自http://blog.youkuaiyun.com/liuxian13183/ ,引用必须注明出处!PopupWindow上套PopupWindow,报错:unable to add window ,is your activity running ?经查在windowManager执行addView操作时出错[java] view plain copy@Override public voi...
2018-06-04 09:43:27
4273
原创 Android系统消息分发体系
Handler、Looper、Message、MessageQueue之间的关系(基于Android API 26)安卓系统设计的消息分发体系,不仅在应用层广泛应用;而且在底层也是使用这个体系,与Binder一起进行消息分发,因此熟悉这个体系是十分必要的。1、ActivityThread初始化时,执行它的main方法,通过Looper.prepareMainLooper方法,初始化...
2018-04-03 00:53:25
2254
原创 Android初级开发第九讲--动画
本文来自http://blog.youkuaiyun.com/liuxian13183/ ,引用必须注明出处! Android中动画的应用,在应用管理软件、购物软件、追星软件等比较广泛;比如常见的进度条设计,此处尤其指圆形的那种。比如清理小火箭,从下向上飞出;比如清理软件提示,由深色渐变成浅色。这些都是动画的应用场景。 Android动画分为两种,一种叫帧动画,就像flash一样,学名Fra...
2017-11-22 15:42:17
1609
原创 Android最新打包方式-支持V2
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!签名机制:V1:7.0以前默认,使用META-INF目录下三个文件,MANIFEST.MF,CERT.MF,CERT.RSA来保证apk不被修改。MANIFEST.MF:记录apk资源中除META-INF,所有文件的Base64编码的SHA1值。防止apk资源被修改。CERT.MF:记录MANIF...
2017-11-09 15:57:53
3204
原创 Git教程(二)-如何上传和同步自己的git项目
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!Git接触并使用多年, 工作中使用较多,它的分布式存储,使每个人的电脑均为服务器的策略非常棒;再加上使用Rsa加密,使得项目可以被自己管理,大众任意提交Pr进行完善,最后自己合并分支,使得Git成为当今计算机界最为流行的版本管理工具。关于Git的日常应用,有的同事喜欢用Git...
2017-07-18 11:42:39
12123
原创 Java高级之注解、反射
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!Java的注解、反射等机制的产生,让动态代理成为可能,一般通过全限定名+类名,找到类,可以invoke它的构造方法以及其他方法,可以获取它的参数(Field)名称和值。注解一般用在代码的注释上、代码审查上(有没有按标准写,比如inspect)、代码注入(hook,asbect.........
2017-07-12 16:14:56
2466
原创 Java中级之线程池源码剖析
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!线程池伴随着线程的产生而产生,主要用于线程复用,减少内存泄露。线程池中使用Thread作为执行体,使用Runnable接口作为执行者,一个个执行者以任务的方式在执行体里完成。任务以下指一个实现Runnable接口的Worker对象,任务放在Thread中被执行原理:corePoolSize:活......
2017-07-10 20:39:08
2089
原创 Android进程中通信的方式
第一、使用进程共享的方式,往往使用android:process=remote,这样开启一个新的进程,使得所有进程都可以访问这个进程,使服务可以在多进程共享;Zygote进行fork的作用是,在单线程条件下,将父进程的资源和内存拷贝到子进程,而Binder是多线程操作的,容易造成死锁;1、数据拷贝1次(一、应用进程到内核传递数据指针二、该块数据在应用进程中申请内存三、从内核到应用层,再次传递指针,即只有第1次发生数据拷贝,为什么不直接映射同一物理空间,因为多线程资源有同步问题);三者运行在三个独立进程中。.
2017-03-30 22:11:23
5369
原创 Android常用构建工具介绍
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!本篇包含:Freeline、JFrog、Jenkins的介绍。Freeline:Instant Run为我们提供了增量更新的方式,支持 gradle2.0和Android4.0以上版本,让构建项目变的快速,同时由于multiDex出现...
2017-01-22 11:48:27
3069
3
原创 Git教程及问题解析
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!Git教程最近用Git比较多,做出教程一份,供大家参考。1、安装Git,并配置环境变量2、配置用户名,邮箱3、切到工作目录下,下载源码,先执行git init 初始化一个环境,然后 4、修改并推送到本地,最后推送到远程 5、...
2017-01-20 13:55:56
2641
1
原创 Android中级第十二讲之DNS问题
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!网络请求经过客户端请求,发送数据包、代理(转发)、隧道(信道)、网关(DNS),最终到服务器。我们都知道网址要通过DNS解析成IP才能到达服务器,也就说IP变化其实到达的是不同的服务器;而这里就涉及到三个问题,第一DNS怎样解析为IP,第二怎样防止IP被篡改,第三IP是否需要缓存。......
2016-12-19 20:40:29
3888
原创 Android高级之十三讲-组件化、插件化、热修复
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!组件化与插件化:前者对功能进行拆分后,独立开发,打成一个包发布;后者对功能拆分,使用主包+分包,可以分别独立发布。热更新:两种方式,一种是multidex,一种是修改指针;前者需要重新启动,后者无需重新启动。指下载patch包,修复错误的一种方式。...............
2016-12-14 23:25:36
5227
2
原创 Android初级第八讲之应用如何保活
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!一般情况下应用保活的场景在于:后台要不断定位描述一条清晰轨迹、IM通信需要及时收到消息提醒等。所谓保活就是避免被应用杀死,前台应用自然不用说,主要是后台应用。我们知道Android的应用优先级是-16到15,系统进程一般拥有-16到-1的优先级,而普通应用只拥有0-15的优......
2016-12-14 21:59:20
6554
原创 Android高级之十三讲之安全方案
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!Android是开源的,内部API相对比较透明,因此App的威胁会多一些,了解一些安全知识,有助于用户体验和产品稳定性。1、App组件方面,慎用android:export=true(Activity、Service、BroadcastReveiver如果组件有超过一个intent-fi......
2016-12-14 21:31:51
4956
原创 Android高级之十二讲之内存、电量、卡顿、流量
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!安卓应用的内存往往是有限的,从开始的8M到16M,24M,32M,48M,64M等逐步变大,但内存的变大是由于分辨率的提高导致,并不意味着内存的可使用量随之增加,而不及时回收(即使Java有自己的垃圾回收机制),容易造成内存过高,引起手机变卡,体验流畅性下降)。-------......
2016-12-09 18:12:15
3644
原创 Java算法之字符串反转分析
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!在日常的开发工作中,算法不会显得那么重要,然而在数据量达百万级别的时候,差距会非常大,今天带大家研究下常见的字符串反转算法。public class StringReverse { public static String reverse1(String or...
2016-11-29 10:59:33
2271
原创 研究微信即时通讯的服务端、朋友圈、红包、推送等方案
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!即时通信:前端获得消息发送到服务端,服务端处理后通过推送的方式,发给接收方;Android使用长连机制,联通网络长连十几分钟,电信仅五六分钟,因此需要根据测试的芯片类型,为了保活,可能要三四分钟就要去连一次,叫心跳机制;IOS通过APN机制推送。即时通讯是在一种平等、开放情况下...
2016-11-27 13:41:45
7237
原创 Android高级第十一讲之不同系统间的区别
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!Android系统不断的升级,从基础到中级再到高级,逐步升级是软件工程敏捷开发的一个重点,在每个版本中升级不同功能,以满足越来越丰富的用户需求,作为一名开发者,熟悉各个版本之间的异同,有助于做产品适配、安全等各方面业务。2.3,加入陀螺仪等一些传感器支持和前后相机支持(Android变...
2016-11-07 22:13:09
2649
原创 Android源码剖析之Framwork层后记篇(硬件消息传递、apk管理、输入法框架、编译过程)
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处! 既然写到后记篇,就代表本系列到此为止,暂时告一段落;其他一些Manager随后有时间再补,就像源码的一些翻译一样,有时间总会补上的,同时也希望大家一如既往的喜欢,直言不讳的提出宝贵意见。 后记将讲述输入模块和编译系统内容,以及对整个系统的总结。
2016-09-01 12:06:18
2805
原创 Android源码剖析之Framwork层消息传递(Wms到View)
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!前面讲过Wms、Ams与Activity的一系列交互,包括创建过程、消息传递、窗口展示等,紧接上篇介绍最终的实现者-窗口和View,上篇对窗口已经有了比较多的介绍,本篇我们再对View再更深一步的了解。首先明确下View的功能,主要用来展示画布即交互的图片背景等,而且承接各......
2016-08-30 18:02:57
3213
原创 Android源码剖析之Framework层进阶版(Wms窗口管理)
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!上一篇我们主要讲了Ams,篇幅有限,本篇再讲讲Wms,即WindowManagerService,管理窗口的服务。主要负责窗口的创建、删除、状态等与手机交互的事情,与Ams配合使用,在SystemServer中创建,用来保持窗口层级关系方便SurfaceFlinger绘制屏幕,和传递...
2016-08-26 18:57:37
3019
原创 Android源码剖析之Framework层实战版(Ams管理Activity启动)
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!讲到实战,就不得不拿两个例子来说明,本篇想拿的是应用最广泛的两个:Ams和Wms,一个管理activity,一个管理窗口,而前面我们已经讲了不少,本篇不再赘述。关于Ams对activity的管理,无非这几个方面:启动哪个activity、物理按键对activi...
2016-08-24 18:03:26
5496
原创 Android源码剖析之Framework层升级版(窗口、系统启动)
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!看本篇文章之前,建议先查看:Android源码剖析之Framework层基础版前面讲了framework的整体层次和基础定义与服务,接下来我们讲讲窗口的创建,底层与应用层界面的交互和管理。一、窗口的创建 上一篇我们讲了三种窗口的类型,本篇接着讲窗口的创建过程,拿Activity创建窗口为例此步骤优先...
2016-08-22 19:14:35
2816
原创 Android源码剖析之Framework层基础版(窗口、linux、token、Binder)
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处! 关于Framework,就是应用层底下的控制层,离应用层最近,总想找个机会,写写WindowMangerService和ActivityManagerService(注意非控件,而是指一类服务)以及其他一些东西,对底层做一个更为全面的认识。而很早以前,写过一篇文章,来简述Android系..................
2016-08-19 17:53:50
2883
原创 Android项目框架之图片加载框架的选择
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处! 从Android爆发以后,自定义的控件如EditTextWithDelete、ActionBar、PullToRresh逐步进入开发者的视野,想起11年的时候,基本项目中使用的UI还全都是Android提供的基础控件,少一点的动画+布局,下载和网络请求都是用HttpClient,图片加载当然也是下载
2016-08-16 18:40:40
2589
原创 Android项目框架升级尝鲜OkHttp
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!随着项目日趋稳定,需求不再总是变化,那么是时间来整理下项目了。先简单介绍下,本项目最初使用loop4j(即async-http)框架,仅98kb大小,使用也比较方便,为什么要选用它呢?13年的时候其他框架还没那么成熟,咱们做项目稳定第一,其次性能,而它刚好满足这个条件;坏处在于请...
2016-07-28 14:24:53
4990
原创 Android Studio工具修理集
本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处!1、Common依赖项目找不到。因为主项目没有引进setting.gradle2、从Eclipse移植到AS,最重要的两个文件是setting.gradle和build.gradle,然后把依赖项目.svn文件夹删除,重新放入主项目目录下,加入版本控制3、使用Lint工......
2016-07-22 16:59:16
2202
Sina、Alipay、QQ、Qihoo第三方网页登录和部分代码
2014-06-06
Android Apk反编译工具
2013-11-20
Android后台应用存活率和后台线程轮循的问题
2016-11-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人