自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 android性能优化(四)之启动优化

一. 前言当用户在手机桌面上点击一个从未打开过的App时(也就是冷启动),到进入第一个页面显示这段时间,默认情况下您的App会首先出现一个白色/黑色屏,过一段时间才是进入第一个Activity显示其具体布局内容。对于一个专业的App来说,这种用户体验肯定是不能接受的,不仅会收到用户吐槽,还会造成公司品牌受损。因此提升App的启动速度是增强用户体验的重要指标。...

2019-08-31 21:53:51 1756 2

原创 android性能优化(三)之Webview优化

阅读本文大概需要 4 分钟。这篇把Webview的优化单独拎出来,是因为Webview与其他普通view来说有自身独特的特点。在做一些native+H5应用开发时,Webview的性能问题一直是关注的重点。所谓Webview性能问题,就是从打开Webview页面开始到可以和用户交互,这期间花费的时间相对于原生页面来说过长,从直观上来讲,用户等待的时间变长了!而用户...

2019-08-25 20:01:30 9317 2

原创 android性能优化(二)之卡顿优化

阅读本文大概需要 5 分钟。相对于其他类型的性能指标,卡顿是能直接让用户产生视觉反馈的现象,比如App反应滞后于用户的操作,在严重的情况下会出现ANR。关乎用户体验的大事,是很容易遭到用户吐槽的。因此,开发人员平时写代码时必须要时刻提醒自己不要落入卡顿的陷阱之中。一. 卡顿原因在罗列卡顿可能会发生的几个点之前,先简单介绍一下发生卡顿的原因。在之前《...

2019-08-25 20:00:44 2958 1

原创 android性能优化(一)之UI渲染优化

阅读本文大概需要 2.6 分钟。在众多高频面试题中,Android性能优化几乎可以说是必问的考题。而此题一出,一场恶战已然拉开序幕,因为此话题牵扯面非常广,绝非三言两语就能够聊完。因此,非常有必要对性能优化做一下系统性的总结。此篇作为性能优化系列开篇,是因为UI渲染优化最为初级,且杂项很多,面试时可以作为回答的起点。对于UI渲染优化,记住一个宗旨:...

2019-08-25 20:00:02 577

原创 一切从android的handler说起(七)之内存泄露

阅读本文大概需要 7 分钟。作为一个客户端,UI无疑是非常重要的,因此主线程承载了非常多的任务,例如生命周期,View操作,包括Toast,View绘制,动画,等等,而这些的实现,都依赖于Android的消息机制模型。可见Handler在Android的地位是非常核心的,在源码中随处可见它的存在。另一方面,在开发中Handler也可以作为线程间通信的重要手段,比如在子...

2019-08-19 23:16:29 416

原创 一切从android的handler说起(六)之四大组件生命周期起源

阅读本文大概需要 4 分钟。上一篇,我们了解到Android里触摸事件是如何一步一步转入UI线程的message queue里被执行的,这种事件是由外部事件触发的。我接着对小张说:其实Android里还有一种UI queue里的事件更为大家熟知,你天天写代码都在与之打交道,你知道吗?小张有些丈二和尚摸不着头脑,想了一会儿问道:能给一些提示吗?我提示道:它...

2019-08-17 18:42:34 1257

原创 一切从android的handler说起(五)之触摸事件模型

阅读本文大概需要 5 分钟。在弄清楚了handler消息机制原理后,小张显得异常高兴,感觉这块儿终于像一碗清水似的看到底了。我无意间说了一句:别高兴得太早,你只清楚了一半!小张听了有点发懵:一半?啥意思,不都非常清晰了吗?我笑了笑,说道:现在你只知道UI线程是事件驱动模型,有事就干,没事就睡觉,那有没有想过事件都从何而来?为何我手指触摸UI上任何一个bu...

2019-08-17 18:42:21 619 1

原创 一切从android的handler说起(四)之postDelay原理

“阅读本文大概需要4分钟。”和小张聊完了handler底层原理后,我跟小张说:你现在知道Android的UI线程是通过事件来驱动的了吧,有消息来才干活,不然就睡大觉。小张点了点头,道:通过刚才的了解,我对事件驱动模型的概念理解更为深刻了。我接着说:恩,其实目前大部分的UI编程都是基于事件驱动模型实现的。对刚才的话题做了总结后,我又转换了话题问小张:你平...

2019-08-14 13:01:37 1847 2

原创 一切从android的handler说起(三)之UI线程为何不卡顿

“阅读本文大概需要4分钟。”和小张聊到兴起,我就问了android面试界一个众所周知的问题。我:之前说到每个线程的looper都在不断的从message queue里取message来处理,那android系统是如何做到“不断”二字的?小张快速回到答:这个我看过一些技术文章里剖析过源码,我记得是Looper是在loop()方法里通过for(;;)死循环里的...

2019-08-14 12:57:09 1484 2

原创 一切从android的handler说起(二)之threadLocal

“阅读本文大概需要2分钟。”看小张有些受惊,我打算换个新的角度。继续问道:刚才说到每个线程只能有一个唯一的looper,你知道android是怎么保证这一点的吗?小张眼睛躲避着我的视线,模糊的回答道:我好像记得有个threadLocal和这个有关。为了给小张一点鼓励,我说道:没错,你说对了,就是它!小张感觉打了一针强心剂。我继续问道:那t...

2019-08-14 12:51:47 483 1

原创 一切从android的handler说起(一)之message

“阅读本文大概需要3.2分钟。” 01工作十余年,作为android面试官面了都不下百场,handler一直都是我的经典面试题,因为这个问题不仅是android的核心之一,而且还能问得由浅入深,由窄到宽,非常能看出面试者的水平处于哪个层级。很多同学看到handler...

2019-08-14 12:45:42 443

原创 Android进程间通信总结

AIDL方式:1. 写AIDL文件,其中有方法func1(), func2(), ..., funcN()2. 编译后产生AIDL生成Interface IMyAidl.java implements IInterface, 内部有静态abstract Stub类extends Binder3. 在服务端进程中,可以是Service,new一个IMyAidl.Stub()类, 实现func1(),...

2018-03-01 16:16:17 258

原创 Kotlin lamda语法备忘

1. 高阶函数高阶函数可以将一个函数作为参数或返回值:fun operate(x:Int=0,y:Int=0,body:(Int,Int)->Int){//body是一个函数类型,传入两个Int类型参数,返回一个Int类型参数 print("this result is "+body(x,y))}高阶函数只是一个参数,就像其他普通参数一样,只规定了形式,真正的实际值由传入的函数或者...

2018-02-27 11:41:23 274

原创 RxJava使用总结

一. 执行顺序:1. 先执行doOnSubscribe(), 当有多个doOnSubscribe()方法时,则由下至上的顺序执行,其执行所在线程由其后面的subscribeOn()来指定;若没有subscribeOn()指定,则执行的线程和本身所在线程一致。2. 再执行observable.create()里的call()方法,其执行所在线程由其后面的subscribeOn()来指定;若没有sub...

2018-02-26 16:59:37 492

转载 你真的懂Handler.postDelayed()的原理吗?

转载自http://www.dss886.com/2016/08/17/01/阅读之前先问大家一个问题:Handler.postDelayed()是先delay一定的时间,然后再放入messageQueue中,还是先直接放入MessageQueue中,然后在里面wait delay的时间?为什么?如果你不答不上来的话,那么此文值得你看看。原文:使用han

2017-05-27 19:23:35 50447 20

转载 java中的try-catch-finally执行顺序你真的弄清楚了吗?

转载自http://blog.csdn.net/lu_ca/article/details/52184423前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.exit() 方法怎么处理?当 catch 和 finally 体里同时遇上 r

2017-05-27 14:27:28 1011

原创 MPAndroidChart MarkerView的精确点击问题解决方案

说到在Android中画图,相信大家对MPAndroidChart不陌生,其功能强大,能画出各种各样非常绚丽的效果图。但是近期公司的项目要求在markerview上添加一些按钮,能够直接在markerview上操作按钮来直接对图上的point进行操控。然后在lib里找了半天,发现原生根本就不支持此功能,然后在其github MPAndroidChart的issue里查找相关问题,发现还真是有很多人提

2017-05-19 17:32:39 5397 3

原创 自定义View总结

一. 自定义ViewGroup 1. 自定义ViewGroup必须重写onMeasure(int widthMeasureSpec, int heightMeasureSpec): a). 这是因为ViewGroup是abstract的,每个viewGroup都有自己的布局方式,因此无法像view一样给出统一的实现方式; b). 另外,必须实现,是因为只有实现了此方法,其parentView才

2017-05-15 19:07:24 443

原创 两行代码搞定发送 Retrofit GET/POST 请求

目前Android开发几乎都离不开网络请求,而很多Android App网络框架都使用Retrofit来发送网络请求和响应交互,其优点是一底层依赖了强大灵活的Okhttp,二是其符合标准的RESTFUL和后端交互更爽。本身Retrofit已经封装得很好了,其使用也很简单://定以接口public interface GitHubService { @GET("users/{user}/repo

2017-05-06 15:43:19 2966

原创 假如让我重新做一个Android App

我会如此搭建和注意下面的点: 1. 横向分业务,多组件开发,一个独立的业务一个library,然后有一个主Module Application, 之间通过一个Router Library通信,进行解耦。 2. 每个业务模块纵向采用MVP方式,进行职责划分, V只负责显示数据,P负责逻辑,M负责获取数据和数据存储。 3. 实时性的数据绝对不做本地数据库的存储,非实时性的数据做本地存储,并且存储时

2017-02-17 15:17:00 536

原创 Android专家级别的面试总结

1.. 自定义View流程 onMeasure, onLayout, onDraw, 采用深度优先,因为必须子view获得测量结果,父view才能确定大小;2.. 事件分发机制 https://www.cnblogs.com/aademeng/articles/6551337.htmlViewGroup: boolean dispatchTouchEvent(){ if(o...

2017-02-15 16:56:28 4218 1

原创 在Android App里实现语言切换

在res底下建立 values-zh-rCN / string.xml 和 values-en-rUS / string.xml在 activity 里使用 context.getResources().getString(R.string.xxx)创建BaseActivity如下,所有的activity 继承BaseActivity:public class BaseActivity ext

2016-09-23 18:44:50 639

原创 人生感悟

最信赖,可依靠的人永远只有自己。因为在最危急的时候谁也帮不了你。甚至别人比你更需要帮助。必须有一技之长,立足社会。适合自己的才是最好的,而不是事物本身有多好。永远不要忽略自身的实际情况。要有老板的心态,每一步都是为了自己的梦想而努力。一定要有目标,财富自由的目标。努力工作的同时,不断的增加被动收入。即不工作你能活几年?任何东西一定要靠自己的实力去获取!靠任何人的给予,永远都会被人以把柄。

2016-09-11 18:10:36 440

原创 Android 蓝牙4.0 BLE 开发之请求同步实现篇 完全解析

开发过Android 蓝牙4.0 BLE的同学都知道,Android的蓝牙开发有非常多的坑,具体坑的集合可见我的前面一篇博客,《Android蓝牙4.0 BLE开发坑总结》,其中不同机型之间的兼容性就是一个很令人头疼的问题,很多问题究其原因是在手机端和智能设备之间发送请求指令和回调时,其方式是异步请求的,即请求完立即结束,等待回调,而回调又在不同的线程中,因此当交互比较频繁并且之间有依赖关系的时候,

2016-09-10 15:56:25 7217 1

原创 Android 开发过程中碰到的小坑集合

registerReceiver 和 unregisterReceiver 要同一个 mReceiver对象才行,否则会出现”Caused by: java.lang.IllegalArgumentException: Receiver not registered”错误。但是!即便是同一个 mReceiver也极容易犯这个错误,原因是mReceiver被多次unregisterReceiver,导

2016-09-09 10:41:46 944

原创 Android蓝牙4.0 BLE开发坑总结

onServicesDiscovered 回调里不能直接执行 write /readDataFromCharacteristic() 或者 enableNotificationOfCharacteristic之类的,而要放到主线程里执行,如 handler.post( … );如果发现连接上了,service也discover到了,但是始终不能触发onCharacteristicChanged的,

2016-09-07 14:54:43 17645 8

原创 Android开发中遇到的大坑

从去年到现在开发公司2代app已经有大半年的时间,这个过程中主导了从产品需求,设计,架构框架搭建,开发,测试,fix bug,上线这一系列的流程,这过程中遇到了无数的坑,但是秉着自己挖的坑,哭着也要把它填满的原则,一路走来总算是沿着自己越来月满意的目标在接近,对很多方面有了更深刻的理解。这里总结一下。头号坑:产品的需求和设计,这一点非常重要,由于是创业公司,并且方向是比较新颖的,很少有可以效仿的前

2016-09-01 23:22:43 2209 1

原创 java基础类型的使用选择

记住java一定要用double,就算数值不大也要用double。了解java虚拟机的底层会知道,float放在内存中其实是当作double来处理的,它不会比double更节约内存资源,对应的double虚拟机会直接以double形式来进行处理,快速而且精度高,但是如果用float,不但不会节约内存资源,虚拟机为了校验float的精度,会花费更多的系统资源,例如cpu时钟,程序执行步骤等等。 相对

2016-05-18 20:21:33 627

转载 java方法区究竟存储了什么?

首先要说明的是,此文章转载自 http://blog.csdn.net/zzhangxiaoyun/article/details/7518917 谢谢作者。另外,这里ps一下,Class对象是存放在堆区的,不是方法区!这点很多人容易犯错。类的元数据(元数据并不是类的Class对象!Class对象是加载的最终产品,类的方法代码,变量名,方法名,访问权限,返回值等等都是在方法区的)才是存在方法区的

2016-05-14 13:40:46 41638 18

原创 JVM内存分配以及存储总结

最近看了一下JVM的内存分配,还是比较复杂的。这里做个总结,首先一个common sense就是操作系统会为每个java进程实例化一个jvm实例。jvm然后再来运行java程序,具体的过程就不多说了,简单来说就是核心classloader如bootstrap, extention, System对类的加载(一定是此顺序,jvm对类的加载采取的是代理委托方式,防止核心类被hack),找到对应的main

2016-04-17 13:12:49 3922 3

原创 Android内存优化之防止OOM篇

1. 不要用static变量持有Activity的引用。2. 单例不要持有Activity的引用,本质原因和1类似,都是它们的生命周期和application相同,导致activity资源无法释放。3. 防止大图的使用,利用inSampleSize之后再用。4. 不要改变图片背景后,忘记释放上次的图片资源。5. 记得broadcast receiver的unregister。6

2016-03-20 20:27:44 501

原创 Android性能优化

1. 在LinearLayout和RelativeLayout均能使用的情况下,并且嵌套层级相同(比如都是垂直往下的布局),优先选择LinearLayout,因为其计算速度更快。2. 当用LinearLayout时需要的的嵌套层级比RelativeLayout更多时,优先选择RelativeLayout。3. 能被多次复用的布局(必出现),要抽取出来,用includelayout="@

2016-03-20 20:22:36 409

原创 startService, bindService区别和总结

service有2种启动方式,startService和bindService。知识点包括以下几个方面:一. 生命周期 (一) startService生命周期 1. onCreate() –> onStartCommand –> onDestroy()。 2. startService 在多个context里多次调用,只有第一次会调用service的onCreate(),所有的context

2016-03-09 14:04:37 2231

原创 View滑动动画的选择及其left, marginLeft, translationX参数的总结

最近由于项目需要,做一个比较复杂的3D动画,核心就是根据手指的滑动来翻转3D效果。因此,又回顾了一下view滑动效果,而且根据不同的方式实现了一下,发现其中很多参数容易搞混,比如改变view的left,marginLeft,translationX中的任意一个值,对另外2个值及其getX是否有影响,因此,做了一下实验,发现挺有意思,结果如下:从上面的数据来看,这几个view的参数之间的值相互之间不影

2016-03-02 18:10:41 1460

原创 如何debug一个问题的方法经验之谈

最近开发一个对于公司来说具有重要战略意义的app项目,我底下带了Android, iOS, 前端开发,后台开发的技术团队。项目进度很紧,人手不够,不断的小脚步迭代,快速前进。众所周知,对于软件行业,只要是开发工作,永远都避免不了有bug的存在,有bug并不可怕,就怕你在代码的海洋中毫无方向的摸索,那简直就是噩梦!而我在带团队的过程中,常常发现属下经常面对稍微困难一点的bug时都无所适从,不知道从哪里

2016-02-29 17:13:18 3670

原创 深入了解ListView工作原理(二) -- 之convertView的ViewType篇

现在继续探讨《深入了解ListView工作原理(一) – 之viewHolder优化篇》 中的第二个问题,这个问题我也有过类似困扰,当我有多种布局给给不同的item的时候,adapter里传给getView里的convertview是此position的item想要的那种viewType吗?因为这涉及到我是否需要在getView里对此convertview做进一步的处理,比如判断是否为viewTyp

2016-02-26 18:40:57 1043

原创 深入了解ListView工作原理(一) -- 之viewHolder优化篇

看到题目,大家可能不禁要问,在网上一搜满大街的是讲ListView工作原理的,还再写一篇这个干吗?不急,没有一点新意,我是绝对不会写重复的东西,若非精品,分享也没有意义。所以,在这里保证,只要耐心看完,一定有干货,并且让你更加清晰的认识到listview内部是怎样工作的。大家可以先看看网上http://www.bkjia.com/Androidjc/1037874.html这篇介绍ListView的

2016-02-26 17:44:57 6934 1

原创 eCharts画图断点连线的解决方案

由于公司产品的需要,最近几个月都在使用eCharts,功能还是很强大的,基本能够实现你想要的任何效果。但是在使用的过程中,碰到一个eCharts本身不支持的功能,就是eCharts只画有真实数据的点,没有真实数据的用”-“表示的点是不画的,所以就会出现一种情况:如果2个非连续的点之间存在空值,那么图看起来就是断开了。但是很多时候,我们希望能够直接把他们用直线连接起来,而eCharts又没有直接提供这

2016-01-10 17:32:21 11850 3

空空如也

空空如也

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

TA关注的人

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