- 博客(41)
- 资源 (3)
- 收藏
- 关注
原创 android SparseArray 分析
介绍sparseArray 是安卓系统提供的一种专用于存储 integer To object的数据结构,其内部的存储结构不同于 hashMap,内部使用的是两个数组:内部使用两个数组来分别存储key和value, 在不指定容器大小的情况下,默认大小是 10,存储:key-value 按照key的值顺序分别存储在key 和 value数组中获取:获取数据的时候是使用的二分查找 mKey 数组所以相对hash map优势:(1) 避免hashMap 的 integer 自动装箱过程;(2
2021-07-02 09:23:30 166
原创 Flutter Image 缓存剖析
Flutter Image 缓存剖析背景image widget分析背景 图片展示是应用程序中最常见的功能,在androd中有一些很经典的插件来处理图片的展示、图片的缓存,例如著名的ImageLoader,Glide,Frescho,flutter 官方也提供了Image的widget来展示图片,Image内部封装了具体文件如果获取,以及数据怎么缓存;image widget...
2020-03-22 22:17:29 2282
转载 聊下git merge --squash
你经常会面临着将dev分支或者很多零散的分支merge到一个公共release分支里。但是有一种情况是需要你处理的,就是在你的dev的分支里有很多commit记录。而这些commit是无需在release里体现的。develop 主分支develop主分支最近的一个commit是”fix imageprint bug.”。我们拉出一个分支进行项目开发,里面会有很多commit...
2019-02-26 20:23:01 318
原创 安卓弹框盖在输入法键盘上解决方法
当输入法键盘显示的时候,弹出全屏弹框,这时默认情况下输入法键盘会消失,弹框会铺满整个屏幕,界面就会闪烁的效果,想让弹框弹出后输入法键盘不消失,输入法键盘盖在键盘上面,解决方法是修改弹框的window属性,Dialog的安卓官方文档有这样一段描述:Note: Activities provide a facility to manage the creation, saving and rest...
2019-02-26 14:31:15 488
原创 view.post 和handler发送消息的区别
有个同事问我这个问题,我们往主线程发送一个runnable,有两种方法可以使用,一种是定义一个主线程的handler,通过handler.postRunnable()来执行,一种方法是通过view.post来执行,那么这两种方式有什么区别,具体使用时应该怎么选择。 我们首先要明白的就是两种方式有什么区别,要搞清楚这个问题,就要分析系统究竟是怎么实现的。对于handler.postRunna...
2018-06-20 00:15:36 799 1
原创 简单分析下glide的实现机制
glide是目前非常流行和受欢迎的图片框架,这个框架从设计架构上看非常弹性,例如对文件格式的支持就是采用了注册的方式, dataLoadProviderRegistry = new DataLoadProviderRegistry(); StreamBitmapDataLoadProvider streamBitmapLoadProvider = ...
2018-06-08 16:52:52 448
原创 一种android 界面卡顿分析方法
android 应用程序是由消息驱动的,分析界面卡顿的问题时往往需要找到耗时的操作,来定位具体产生卡顿的原因,Looper的loop函数就是不断获取消息队列消息的函数,并执行消息体回调.在loope 函数内有两个日志打印代码, // This must be in a local variable, in case a UI event sets the logger ...
2018-03-30 11:05:15 1443
转载 LRU和LFU的区别
LRU和LFU的区别 转载 2011年10月12日 17:20:20 标签:算法 53144LRU和LFU是不同的!LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!比如,第二种方法的时期T为10分钟,如果每分钟进行
2018-03-02 14:36:32 251
原创 android webview 多次刷新问题
项目中遇到一个问题 webview加载一个网页的时候,抓包看到访问的网页地址被请求了不止一次,预计应该是一次就可以了,现象上看起来就是界面会闪烁,体验不好,从问题现象看没有解决思路,通过回溯代码 发现出现问题的时候就是对webview的useragent有多次设置,去掉多次设置就没有问题现象了,再查api : /** * Sets the WebView’s user-ag
2018-02-01 15:56:41 6803
原创 android 应用程序 电量优化
应用程序电量优化:1 允许网络连接批量执行 批量请求数据 2 发起请求前先判断网络的可达性 3 使用缓存数据 减少网络连接的次数 4 使用gzip 缓存数据
2018-01-04 10:16:05 224
原创 java 虚拟机内存模型
历史: CPU对磁盘的读写速度,远远跟不上 CPU 的计算速度,为了解决这个问题,所以引入了内存; 随着 CPU 的发展,内存的读写速度也跟不上CPU的计算速度,为了解决这个问题,硬件厂商又在每个cpu上增加了高速缓存,所以现在 CPU 和内存的交互就变成:
2017-12-18 20:02:38 270
转载 adb log 命令介绍
1.android log系统 2.logcat介绍logcat是android中的一个命令行工具,可以用于得到程序的log信息log类是一个日志类,可以在代码中使用logcat打印出消息常见的日志纪录方法包括:方法描述v(String,String) (vervbose)显示全部信息d
2017-11-23 10:50:57 1732
原创 android dalvic 虚拟机内存参数
dalvik.vm.heapstartsize 堆分配的初始大小,调整这个值会影响到应用的流畅性和整体ram消耗。这个值越小,系统ram消耗越慢,但是由于初始值较小,一些较大的应用需要扩张这个堆,从而引发gc和堆调整的策略,会应用反应更慢。相反,这个值越大系统ram消耗越快,但是程序更流畅。 dalvik.vm.heapgrowthlimit ...
2017-09-19 10:28:29 1000
转载 字符编码
随便说说字符集和编码快下班时,爱问问题的小朋友Nico又问了一个问题:"sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思。"并不是所有简单的问题都很容易回答,就像这个问题一样。于是我答应专门写一篇BLOG来从头讲讲编码的故事。那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起。嗯,也许
2017-03-29 14:07:24 224
原创 Android内存优化(使用SparseArray和ArrayMap代替HashMap)
在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到更好的性能,相反反而更消耗内存,所以针对Android这种移动平台,也推出了更符合自己的api,比如SparseArray、ArrayMap用来代替HashMap在有些情况下能带来更好的性能提升。
2017-03-16 10:54:28 329
转载 ubuntu 12.04 设置远程共享桌面
为了解决Windows远程桌面访问Ubuntu 12.04 之一 中提到的VNC远程桌面的缺点(见http://www.linuxidc.com/Linux/2012-07/64801.htm),我们采用第二种方法XRDP,该方法支持多用户登录并远程桌面。1、首先在Ubuntu 12.04 中安装GNOME桌面:sudo apt-get install gnome-panel
2017-03-02 09:58:40 2617 1
转载 android 命令打包
所以久而久之很多人都不会最基础的打包方式,现在就来捋顺关系首先是步骤 ,网上最少有三步,最多有8步,其中一些函数都已经被废弃,所以,笔者选择比较通用的6步1.用aapt命令生成R.java文件2.用javac命令编译java源文件生成class文件3.用dx.bat将class文件转换成classes.dex文件4.用aapt命令生成资源包文件resou
2016-08-22 15:54:45 622
转载 android 内存管理
TermsVSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)一
2016-07-30 10:46:35 307
转载 sqlite优化
Android默认使用了SQLite数据库,在应用程序开发中,我们使用最多的无外乎增删改查。纵使操作简单,也有可能出现查找数据缓慢,插入数据耗时等情
2016-03-07 20:03:56 461
转载 数据库设计三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。简单来说,就是:第一范式:具有原子性第二范式:主键列与非主键列遵循完全函数依赖关系第三范式:非主键列之间没有传递函数依赖关系 在实际开发中最
2016-01-14 18:04:38 341
原创 android studio 自动生成R文件影响编译的解决方法
1 工程目录不是一个标准的eclipse工程,也不是一个标准的android studio工程,而是由多个文件夹,通过编译脚本在编译时刻拷贝文件夹形成一个完整的工程目录,目的是可以为不同的平台配置不同的功能,问题就是在用android studio看完整的工程代码时,只能通过new—>import project 来完成,默认情况下这样生成的工程会自动生成gen文件夹,并且有R文件生成,这时用命令
2016-01-06 20:36:14 4724 1
转载 android 应用内部获取本应用或者对应包名的应用的SHA1签名的办法
我这个人比较懒,每次做的都是心血来潮,所以打算改掉这个坏毛病。昨晚很晚才睡,躺在床上一直在回想。这两年来,我曾经的目标是什么,我放弃了什么,我完成了什么。结果目标很多,也放弃了一些。完成的几乎没有。想来,还是挺失败的。生活逐渐磨平了棱角,其实不怨生活,还是自己信心不够坚定。不是只有年轻才有梦想,是因为有梦想,所以才年轻。那些和我一样曾经有些目标,却中途逐渐遗忘的朋友们,坚持下去。身埋黄土半生沙,雕镂
2015-12-22 21:38:53 1556
转载 排序算法小结
排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。 我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们将围绕这张图来思考几个问题。 上面的这张图来自一个PPT。它概括了数据结构中的所有常见的排序算
2015-11-16 17:44:19 667 1
转载 使用Eclipse中提供的Refactor(重构)工具
重构是对软件内部结构的一种调整,目的是在不改变软件行为的前提下,提高其可理解性,降低其修改成本。开发人员可以使用一系列重构准则,在不改变软件行为的前提下,调整软件的结构。有很多种原因,开发人员应该重构代码,例如之前的开发人员代码写得很烂、自己以前设计时有缺陷、需求变更需要添加一些新的功能或修改原有功能等等。Martin Fowler在其著名的>一书中谈到了为何重构的几点原因:1.
2015-11-06 15:32:09 344
转载 HTTP返回码总结
http状态码/http返回码详解 HTTP状态码(HTTP Status Code)表示http服务器对与请求HTTP响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。 所有状态码的第一个数字代表了响应的五种状态之一: 1xx:请求收到,继续处理 2xx:操作成功收到,
2015-11-03 00:55:28 745
原创 HashMap的存储结构
HashMap的存储结构:属于连续存储空间和非连续存储空间结构的组合,数组的每一个元素存储一个hash,HashMap的代码片段: /** * Allocate a table of the given capacity and set the threshold accordingly. * @param newCapacity must be a
2015-11-02 15:42:16 1241
转载 Java继承和多态原理
public class MainClass { public static void main(String[] args) { Fu f = new Zi(); Zi z = new Zi(); System.out.println("f.num:"+f.num); System.out.println("z
2015-11-01 21:32:29 448
转载 Android布局中Layout_weight的属性
本文详细介绍了Android布局中Layout_weight的属性,它是用来分配属于空间的一个属性,你可以设置他的权重。最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够 说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出来和大家分享。首先看一下Layout_weight属性的作用:它是用来
2015-10-28 11:04:06 548
转载 android的布局优化
在布局优化中,Androi的官方提到了这三种布局、、,并介绍了这三种布局各有的优势。1、布局重用标签能够重用布局文件,简单的使用如下:[html] view plaincopyprint?LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" and
2015-10-28 10:34:53 311
原创 Handler引起的内存泄露
什么是内存泄露?Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达
2015-06-04 17:15:08 457
原创 判断程序是否处于后台的方法
public static boolean isBackground(Context context) { boolean isBackground = false; ActivityManager activityManager = (ActivityManager) context .getSystemService(Con
2015-05-26 10:14:01 832
转载 Android消息处理机制
Google参考了Windows的消息处理机制,在Android系统中实现了一套类似的消息处理机制。学习Android的消息处理机制,有几个概念(类)必须了解:1. Message消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程。2. Message Queue消息队列,用来存放通
2015-04-21 20:23:17 427
原创 activity启动模式分析launchemode
我们在开发项目的过程中,会涉及到该应用中多个Activity组件之间的跳转,或者夹带其它应用的可复用的Activity。例如我们可能希望跳转到原来某个Activity实例,而不是产生大量重复的 Activity。这样就需要我们为 Activity 配置特定的加载模式,而不是使用默认的加载模式。Activity 有四种加载模式[1] standard 模式 这是默
2015-04-10 16:53:08 544
原创 静默安装的两种实现方式
private boolean silentInstall(String fileName) { String apkAbsolutePath = fileName;// StorageUtils.getAPKDownloadDir() + // File.separator + fileNam
2015-03-24 11:40:09 1601
原创 使用MulticastSocket进行手机之间的多播消息发送
DatagramSocket只允许数据报发送给指定的目标地址,而MulticastSocket可以将数据报以广播方式发送到数量不等的多个客户端。若要使用多点广播时,则需要让一个数据报标有一组目标主机地址,当数据报发出后,整个组的所有主机都能收到该数据报。IP多点广播(或多点发送)实现了将单一信息发送到多个接收者的广播,其思想是设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看做
2014-12-18 19:50:18 1922
原创 关于单例的几点注意事项
单例在实际的项目中个使用频率比较高,比如环境类,工具类,管理器类,都应该设计成单例,即保证项目运行中该类对象只有一个类对象存在;第一种写法:class SingleTon{ private SingleTon() { (1) } public stat
2014-12-07 21:54:34 691
转载 Ubuntu硬盘分区/格式化/挂载文件系统各种应用
硬盘上有些什么、文件们都有多大,在有些时候我们是需要关心的,所以这里简单介绍两个命令:df、du。一个Ubuntu硬盘可以划分4个区,3个主要分区,一个扩展分区,而扩展分区里可以划分n个逻辑分区,扩展分区本身不能储存任何东西,也不能格式化成某种文件系统,只能用于区分逻辑分区。Ubuntu更新了很多版本更新,我本人认为Ubuntu硬盘很好使的文件系统,在此
2014-04-14 23:26:11 2385
转载 c c++ 常见面试题
希望这个贴子能给正在找工作的朋友一点帮助.SIZEOF 题目:如果代码里面有 while(*p) 判断字符串结束的,要用 *p!='/0' 代替。1)sizeof相关系列问题, const相关系列问题a. 对于 struct s{char a;int b} sizeof(s) = 8 因为内存对齐 b. 对于 int a[200] sizeof(a) = 200* siz
2014-03-30 15:09:47 718
ModelGoon 检查代码依赖关系的插件
2014-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人