自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

转载 图解排序算法之堆排序

https://www.cnblogs.com/chengxiao/p/6129630.html

2018-06-06 11:49:38 177

原创 一种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

原创 Eclipse 安装 html插件

用Eclipse 安装html插件,后可以直接在ECL

2014-11-11 15:55:14 2409

转载 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

图片处理工具

图片批量处理的工具类,eclipse导入,选择文件路径

2016-02-16

安卓环形进度条

基于安卓的环形进度显示控件,可在此基础上做功能扩展。

2015-11-08

ModelGoon 检查代码依赖关系的插件

ModelGoon 检查代码依赖关系的Eclipse插件,解压后放在eclipse下的dropins文件夹下即可,然后点击项目-》新建-》其他 就有了

2014-11-06

空空如也

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

TA关注的人

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