- 博客(82)
- 收藏
- 关注
原创 关于第三方地图
最近做地图导航功能,顾实现这四种地图导航功能,代码如下: 高德地图代码: public static void openGaoDeMap(Context context, String name, String lat, String log) { try { if (MethodUtils.isAvilible(context, "com.a
2017-07-04 10:39:14
411
原创 FindBugs的使用
对于代码质量的检查,一直是一个比较棘手的问题。虽然我们部门有关于java代码的各种规范,领导也多次强调对代码的评审。但是在实际执行过程中,由于开发人员的水平参差不齐,在开发项目时还有各种其他因素,比如时间紧任务重,自己的代码不规范没有意识到,就疏于对代码质量的检查,然后草率的提交。还有就是大家对代码检测的不重视,有种意识就是即使代码不规范,我们的程序也可以正常运行,为什么要多次一举呢。由于
2017-06-21 14:50:37
359
原创 LeakCanary
提起内存泄漏,感觉可以说一辈子。这是个老生常谈的话题,也是Android新手容易忽略的一点。为了避免OOM,我们尽量要把内存泄漏扼杀在摇篮里,不然OOM以后,再回头去补漏,如同大海捞针。LeakCanary绝对是内存泄漏大杀器,一言不合先上图~发现内存泄漏后,通知栏会提醒:点开后长这样:继续点击,这里的定位不是代码行,而是某个类引起了泄漏,比如我这张图:
2017-06-21 14:46:17
314
原创 TextInputLayout
先导入依赖compile 'com.android.support:appcompat-v7:25.3.1'compile 'com.android.support:design:25.0.0'布局文件xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.co
2017-06-20 15:52:35
240
原创 hashMap的原理 深入理解
首先再次强调hashcode (==)和equals的真正含义(我记得以前有人会说,equals是判断对象内容,hashcode是判断是否相等之类):equals:是否同一个对象实例。注意,是“实例”。比如String s = new String("test"); s.equals(s), 这就是同一个对象实例的比较;等号(==):对比对象实例的内存地址(也即对象实例的ID),来判断是
2017-06-17 10:11:54
243
原创 APK瘦身
为什么APK要瘦身。APK越大,在下载安装过程中,他们耗费的流量会越多,安装等待时间也会越长;对于产品本身,意味着下载转化率会越低(因为竞品中,用户有更多机会选择那个体验最好,功能最多,性能最好,包最小的),所以apk的瘦身优化也很重要,本篇博客将讲述apk瘦身的相关内容包体分析在Android Studio工具栏里,打开build–>Analyze APK, 选择要分析的
2017-06-14 15:56:05
471
原创 Android中的性能优化
Android中的性能优化 性能优化就是对性能的优化它包括一下以及方面 内存优化 UI优化(布局优化和绘制优化)速度的优化(线程优化、网络优化())电量优化启动优化
2017-06-14 14:51:30
360
原创 Android性能优化全方面解析
性能优化1 内存优化 UI优化代码优化数据库优化线程优化电量app启动优化网络优化、数据库优化增加索引 分表查询提高查询效率事物sql语句的优化StringBuffer代替String异步线程
2017-06-14 10:34:46
422
原创 Android中的内存优化
为什么要进行内存优化?因为App运行内存限制,OOM导致App崩溃App性能 流畅性不流畅会导致用户体验效果非常不好内存优化Android的内存管理方式App内存优化方法OOM问题优化为什么要进行内存的限制?分式复用多个app同时在后台运行的的时候如果不合理的分配内存 如果被一个应用程序使用其他的就没法使用尤其图片
2017-06-13 09:59:35
231
原创 Http协议
Http概述什么是Http采用知识点的形式,个人认为会更加高效直观一点。 - HTTP,即超文本传输协议 - 它定义了浏览器(客户端的一种),如何向服务器请求文档,以及服务器怎样把文档传送给浏览器(客户端) - HTTP面向应用层,它是万维网上能够可靠交换文件(声音、文本、图片等各种多媒体文件)的重要基础Http基本工作流程一次Http操作称为一个事务,其工作流程可以分
2017-06-10 08:22:26
344
原创 Xbanner
//在build.gradle文件中加入依赖compile 'com.xhb:xbanner:1.2.2'compile 'com.nineoldandroids:library:2.4.0'xml version="1.0" encoding="utf-8"?>selector xmlns:android="http://schemas.android.com/apk/re
2017-06-09 21:25:49
313
原创 app的卡顿
一般的卡顿现象就是界面不流畅 这个现象主要也是首页和详情页面会出现的比较多因为我们一般主界面都会做的嵌套了太多的布局比如 我们有顶部导航 也有底部导航中间还会嵌套两层viewpager里面还有fragment它里边有一个16ms机制 cpu计算 gpu用来绘制 如果嵌套了太多的话 尤其还有图片 就会导致16ms无法绘制完成 会导致丢帧 造成了页面的卡顿
2017-06-09 14:18:50
299
原创 Retrofit的源码分析
Retrofit是一个网络请求框架 也就是说用来做网络请求的Retrofit现在形势大好 我们在很多项目中都会选择使用Retrofit做网络请求选择使用retrofit的原因是因为他底层是封装了okhttp做网络请求 2.0以后封装的应该还是okhttp3接下来就谈一下retrofit的源码吧他是通过注解方式进行get post请求 这样的好处就是为了解耦我们
2017-06-02 20:43:01
378
原创 MVP mvc
Mvc(Model View Controller)mvc是一种架构设计模式该模式主要应用图形化界面应用程序model 模型 (负责 处理业务逻辑 处理数据 网络请求)view 视图(用户可见视图 可进行交互)controller 控制层(取出数据主要用于操作数据库)优点是 耦合性低可维护性高部署快缺点是不适合中小型的项目增加系统结构的实现和
2017-06-01 08:45:17
184
原创 Binder
Binder是来进行 IPC 说白了也就两个进程间通信的什么样的情况下会用到进程间通信呢其实一个应用之间的两个activity之间的跳转就是进程间通信 (对整个系统而言 而不是单指应用层层面)为什么是这样的呢在我们的手机上有很多东西 不是在某一个应用里面的 比如说是系统服务 如果应用要使用系统服务 这就是跨进程 比如说 activityma
2017-06-01 08:44:47
175
原创 内存泄露和内存溢出
内存溢出是对象的内存超出了分配的空间的大小内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。内存溢出的原因是由于内存泄露导致 内存泄露是长时间保持某些资源的引用 垃圾回收器无法回收他 该对象占用的内存也无法使用就造成了内存泄露Android 中常见就是Activity被引用在调用finish之后却没有释放,第二次打开activity又重新创建,这
2017-06-01 08:33:02
294
原创 Activity的四种启动模式
standard 标准启动模式 每次都创建一个新的activity实例 在这个模式下可以创建多个相同的实例singletop 单一顶部 可以有多个实例 但是不可以有相同的activity叠加 启动相同的activity不会创建相同的activity实例 而是调用他的onnewIntent方法singleinstance 只有一个实例运行在task中这个task只有一个实例不
2017-05-31 19:43:52
170
原创 MVC
MVC(Model View Controller)是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序。MVC由Model(模型)、View(视图)及Controller(控制器)三部分组成。最早用于java它有很多好处,但也有一些缺点。耦合性低视图层和业务层分离m 负责处理c层的数据 v 用户可见视图c处理数据库数据生命周期成本低
2017-05-31 08:18:28
546
1
原创 Volley框架
我们平时在开发安卓的时候不可避免的都要用到网络技术 最原始的时候我们想要请求网络数据都是用的httpurlconnection 和httpclient 不过这两者的用法还是相对复杂的如果不进适当的封装的话就会写出不少重复的代码所以网络请求框架就应运而生了比如说AsynkHttpclient使得所有的通信方法都封装在内部 也比如使用imageloader也很简单的从网络中获
2017-05-27 07:57:23
188
原创 Volley
1 . 什么是Retrofit?Retrofit是针对于Android/Java的、基于okHttp的、一种轻量级且安全的、并使用注解方式的网络请求框架。2 . 我们为什么要使用Retrofit,它有哪些优势?首先,Retrofit使用注解方式,大大简化了我们的URL拼写形式,而且注解含义一目了然,简单易懂;其次,Retrofit使用简单,结构层次分明,每一步都能清
2017-05-27 07:48:54
208
原创 listview的错位原理
最近去面试被问到了listview中图片错位的原因,而我一直在往viewholder和tag机制上聊(被虐了),其实viewholder和tag机制只是解决图片错位的方法,而非产生图片错位的原理,回来又赶紧脑补了下~首先上图 图片错位原理: 如果我们只是简单显示list中数据,而没用convertview的复用机制和异步操作,就不会产生图片错位;重用convertview但没用异步
2017-05-26 22:04:23
262
原创 Binder
Binder是来进行 IPC 说白了也就两个进程间通信的什么样的情况下会用到进程间通信呢其实一个应用之间的两个activity之间的跳转就是进程间通信 为什么是这样的呢在我们的手机上有很多东西 不是在某一个应用里面的 比如说是系统服务 如果应用要使用系统服务 这就是跨进程 比如说 activitymanagerservice pakagermanag
2017-05-25 09:35:12
258
原创 AsyncTask原理
AsycTask工作原理AsycTask是一个异步任务是对handler和线程池的封装同时他也是一个抽象类,在我们使用他的时候需要定义它的派生子类 他也是一个泛型类里面有三个参数 params progress resultparams 是doinbackgraound()方法的参数progress AsyncTask所执行的后台任务的进度类型;Result:后台任务的
2017-05-23 14:04:56
275
原创 Handler的原理
Handler的原理:子线程中将Message发送给主线程,主线程接收Message,并进行处理其中使用handler过程中 涉及到3个对象Message:一个消息对象 ,主要在子线程中吧绑定的数据,携带到主线程MessageQueue:住县城里面的消息队列,接受子线程发来的Message对象(是内部执行的,不可见的);Looper:消息循环器,不断的从messagequeue中取
2017-05-23 09:29:28
306
原创 Rsa算法
RSA算法的原理第一步,随机选择两个不相等的质数p和q,如61和53。实际应用中,这两个质数越大,就越难破解。第二步,计算p和q的乘积n。把61和53相乘,n=61×53=3233。n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。第三步,计算n的欧拉函数φ(n)。根
2017-05-23 07:54:05
241
原创 事件传递机制
事件传递机制为什么要进行事件分发机制?安卓上面的view是树形结构的 View可能会重叠起来了 当 我们点击的地方有多个view可以响应的时候,这个点击事件应该给谁呢?就需要事件分发机制来帮忙了View的结构事件传递一共有三个方法这三个方
2017-05-22 20:09:19
275
原创 线程池技术
什么是线程池线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而,增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中并等待下一次分配任务。为什么要使用线程池程序启动新线程的成本比较高 他要涉及到与操作系统
2017-05-22 08:13:35
421
原创 为什么要进行线程间通讯
因为 安卓基于四大组件开发四大组件 默认在主线程运行如果做耗时操作 就会导致anr因为子线程不能做耗时操作 主线程不能更新ui所以就引入线程间通讯AysncTask Handler EventBus Rxjava
2017-05-20 09:06:03
690
原创 EventBus
EventBus 事件总线线程之间的通讯 AsykTask Handler EventBus RxAndroid事件总线是android下高效的发布 订阅事件的的机制 作用是可以替代传统的 Intent Handler BroadCast 或者是接口回调进行 Fragment Activity 之间的传递数据 特点是简洁
2017-05-19 08:04:01
239
原创 HashMap常见问题
常见问题:1、“你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的工作原理吗?” HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来
2017-05-16 11:07:06
260
原创 ArryList的扩容机制
ArryList集合的默认容量是 10 每次都是1.5倍+1的扩容量如果数据量比较大如果添加的数据量比较庞大 就要进行多次扩容所以在创建集合的时候适当指定集合的默认容量的大小 有利于提高效率 不用进行多次的扩容 例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过:16*2*2*
2017-05-14 19:28:34
694
原创 retorfit
retrofit Retrofit是一个不错的网络请求库就是对okhttp做了一层封装。把网络请求都交给给了Okhttp 优点是 retrofit简化了网络请求流程,基于OkHtttp做了封装,解耦的更彻底:比方说通过注解来配置请求参数 Retrofit的使用就是以下几步: 定义接口,参数声明,Url都通过Annotation指定 Ret
2017-05-12 08:49:38
331
原创 Rxjava的设计原理
R x Reactive 响应式扩展 Extension 该框架组造由微软开发并在2012年11月开源支持.net javascript c++rxjava简单来说是一个实现异步操作的库 基于扩展的观察者模式 Rxandorid 就是对Rxjava在安卓平台上的扩展好处简洁以前写代码 风格多以循环嵌套为主 Rxjava 的业务逻辑是通过链式点的形式实现
2017-05-12 08:44:31
359
原创 查询数组中每个数 出现的次数
数组 int[] arr = {1, 1, 1, 33, 3}; //查出来数中数字 一共出现了几次 Map map = new HashMap();//定义一个集合 存放对象和个数 和元素 for (int i = 0; i length; i++) {//将数组中的数据存到临时的变量里面 int temp = arr[i];//定义一个coun
2017-05-11 08:19:26
1727
原创 Dagger2
依赖注入dagger2调用者需要实i例化对象时不需要自己创建而是从外部传入降低耦合度在编译时期调用提高运行时效率和减小apk的大小@Moudle 作为对象的容器@Provider 标注提供实例化对象的方法@Compant 桥梁@Inject容器@ProvidesPerson providerPerson(){return new Person();
2017-05-09 15:31:34
182
原创 Git命令行
创建仓库用命令行将仓库克隆到本地git clone cd+文件名git add .git commit -m "a"git push origin master第一次提交成功j解决多人提交同一文件的冲突git checkout HEADgit reset -- haed
2017-05-09 09:07:51
186
原创 Service
Service(服务)service是不可见的是安卓的 四大组件之一 跟activity非常像 但是service是不可见的 优先级高于activity 并且serice运行在主线程service的启动有两种方式 startservice(非绑定) Bindservice(绑定) startservice的生命周期是oncreate()
2017-05-08 08:25:13
180
原创 Service和intentservice的区别
IntentService是继承Service的,那么它包含了Service的全部特性,当然也包含service的生命周期,那么与service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去你执行你的耗时操作。 Service中提供了一个方法: public int onStartCommand(I
2017-05-07 20:56:55
274
原创 mvc mvp
mvc model view controller 自己做了一个demo recyclerview的条目展示 定义了一个Newsmoudle接口 public void geturl(String url, OnNewsListner onNewsListner);定义了一个方法 传递url 和 一个接口OnNewsListnerpub
2017-05-07 18:54:30
194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人