自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曹银飞的专栏

既往不纠结,纵情向前看!#继续努力吧#

  • 博客(86)
  • 资源 (33)
  • 收藏
  • 关注

原创 面试官问我:ThreadLocal的原理是什么,Looper对象为什么要存在ThreadLocal中?

记得看文章三部曲,点赞,评论,转发。微信搜索【程序员小安】关注还在移动开发领域苟活的大龄程序员,“面试系列”文章将在公众号同步发布。1.前言最近看到网络上都说现在内卷化严重,面试很难,作为颜值担当的天才少年_也开始了面试之路,既然说面试官各个都是精锐,很不巧,老子打的就是精锐。2.正文天才少年_信心满满的来到某东的会议室,等待面试,决定跟他们好好切磋一翻。小伙子,我是今天的面试官,看我的发型你应该知道我的技术有多强了,闲话不多说了,Looper对象使用ThreadLocal来保证每个.

2020-11-28 16:17:52 71

原创 程序员吐槽的“面试造火箭、工作拧螺丝”,用应聘司机的场景还原当下奇葩的面试
原力计划

记得看文章三部曲,点赞,评论,转发。微信搜索【程序员小安】关注还在移动开发领域苟活的大龄程序员,“面试系列”文章将在公众号同步发布。1.前言看完《你为什么在现在的公司不离职?》,很多同学踏上了面试之路,作为颜值担当的天才少年_也接触了一些公司,深刻的认识到什么叫面试造火箭,工作拧螺丝。为了让普通读者能够看懂,我以应聘司机为例,还原面试场景。2.正文天才少年_来到一家公司应聘汽车司机,他是一个有八年工作经验的老司机,信心满满。填完面试申请表,就被漂亮的人事小姐姐带到单独的会议室,做着不可告人.

2020-05-31 17:05:13 9088 25

原创 面试官问我:Android APP中如何测试FPS?看我如何分析京东,拼多多App的FPS。
原力计划

记得看文章三部曲,点赞,评论,转发。微信搜索【程序员小安】关注还在移动开发领域苟活的大龄程序员,“面试系列”文章将在公众号同步发布。1.前言通过面试官问我:Andriod中子线程为什么不能更新UI?成功斩获offer的天才少年_逐渐膨胀,今天准备准备去大厂试一下。2.正文天才少年_来到一家大厂等待面试,上家公司萌妹子面试官让我久久不能忘记,不知道今天的面试官是什么样子。一个眼睛更大更亮,超级可爱的小姐姐,站在我面前,竟然比昨天的面试官更蠢萌,今天看天才少年如何把她带回家,什么鬼,是把off.

2020-05-16 00:01:43 1017 1

原创 面试官问我:Andriod为什么不能在子线程更新UI?
原力计划

记得看文章三部曲,点赞,评论,转发。微信搜索【程序员小安】关注还在移动开发领域苟活的大龄程序员,“面试系列”文章将在公众号同步发布。1.前言看完《你为什么在现在的公司不离职?》,很多同学踏上了面试之路,作为颜值担当的天才少年_也开始了面试之路。2.正文天才少年_来到一家公司等待面试中。。。一个眼睛又大又亮的小姐姐,萌萌的站在我去 的面前。你像一片轻柔的云在我眼前飘来飘去,你清丽秀雅的脸上荡漾着春天般美丽的笑容,我连我们孩子的名字都起好了。等等,我tm不是来面试的吗?小伙子,听说你.

2020-05-13 20:47:31 5216 1

原创 看完这篇View绘制原理,和阿里面试官扯皮就没问题了
原力计划

现象描述小H最近闲来无事,准备去自己开发的商品详情页看看有没有MM图片,看得正投入时。发现logcat中一直在打印log,这就有点尴尬啦。小H翻开代码,找到了原因,原来是四级页单行展示Tag时,需要对展示宽度进行测量,具体实现方法是这样的:1, 获取ViewTreeObserver对象:ViewTreeObserver vto = nameView.getViewTreeObserve...

2020-05-08 22:24:26 1579 1

原创 你为什么在现在的公司不离职?
原力计划

记得看文章三部曲,点赞,评论,转发。微信搜索【程序员小安】关注还在移动开发领域苟活的大龄程序员,移动开发“面试系列”文章将在公众号发布。由于疫情的影响,很多公司取消了各项福利,比如餐补,通讯补贴,班车,加薪等等,甚至有个别公司出现高管带头降薪的怪象。不得不说,由于疫情,很多公司业务受到严重影响,暂时取消各项福利,无可厚非。这些福利本身就是公司在发展良好的情况下提供给大家的。对于高管带头降薪...

2020-04-06 12:33:34 7711 17

原创 大厂面试必备之设计模式:漫画装饰者模式
原力计划

小安实现的代码如下:/** * @Author: 欢迎关注公众号:程序员小安 * @description:价格基类 * @CreateDate: 2020/3/6 * @Version: 1.0 */public abstract class Price { private boolean isNeedVegetables;//是否要青菜 private ...

2020-03-10 23:10:29 3473

原创 2019年博客之星年度总评选,希望大家支持投票,非常感谢

非常荣幸能够晋级"2019年博客之星年度总评选"前200名!1月10日起进入200进20的投票阶段,需要小伙伴们支持投票。从16年开始在csdn上分享技术文章开始,累积至今,输出了76篇原创,访问量50w左右,最近主要写设计模式系列,面试系列和个人杂谈,受到不错的反响。看到每天博客可以帮助几千人,心里还是很开心的,大家的支持是我坚持的动力,2020年,我会继续输出高质量的文章。重点来啦,大...

2020-01-11 22:11:12 4674 1

原创 为什么猝死的都是程序员,基本上不见产品经理猝死呢?

相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢?我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果:搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。所以程序员猝死的概率真的比产品经理大,并不是错...

2020-01-05 15:09:22 294120 413

原创 西游记团队中如果需要裁掉一个人,会先裁掉谁?

2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图:裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢?我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么?西游记团队组成:1.唐僧作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...

2019-11-23 16:04:17 96031 148

原创 大厂面试必备之设计模式:漫画适配器模式

适配器模式:将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。官方定义不太好理解,我翻译一下,在适配器模式中,可以通过创建适配器进行接口转换,让不兼容的接口变成兼容。比如中国人家庭里面都用的国标的充电器,那插座肯定也是国标的,不然没有办法充电,但是当你买了一个港行的ipad的时候,他的充电器却是港版插头,为了能够正常充电,我们就需要买一个...

2019-11-21 20:12:39 5406 2

原创 大厂面试必备之设计模式:漫画观察者模式

如上图,产品经理接到老板通知,需要临时新增需求,万能的产品经理,立刻通知所有程序员去实现该需求。小安用程序的形式实现上图的过程,代码如下:/** * @Author: 欢迎关注公众号:程序员小安 * @description: 老板 * @CreateDate: 2019/10/30 * @Version: 1.0 */public class Boss { publ...

2019-10-30 23:23:32 4566 4

原创 大厂面试必备之设计模式:漫画策略模式

小安实现的代码如下:/** * @Author: 程序员小安 * @description: 购物车 * @CreateDate: 2019/10/27 * @Version: 1.0 */public class ShopCart { public ShopCart() { } public void pay(String payType) { ...

2019-10-27 17:43:19 3967 6

原创 大厂面试必备之设计模式:漫画单例模式

【首先不管何种形式实现单例模式,构造方法一定是私有的,这是大前提。】饿汉模式饿汉模式中的类实例是当类被加载时就被初始化出来的,所以在应用初始化时,会占用不必要的内存。同时,由于该实例在类被加载的时候就创建出来了,所以他是线程安全的。因为类的初始化是由ClassLoader完成的,利用了ClassLoader的线程安全机制,ClassLoader的loadClass方法在加载类的时候...

2019-10-10 23:59:33 3440 9

原创 Android Studio依赖第三方maven库,出现Failed to resolve:***错误

1.前言这个问题折腾了一个上午,写下来记录一下,也让帮助其他人快速解决类似问题吧。2.问题描述项目在一台电脑上正常编译,当换了另外一台电脑后,依赖第三方maven库,下载AAR/JAR包时,一直报Failed to resolve的错误,如下图所示:一开始怀疑是网络问题,sdk版本不匹配,上网搜了一大堆,有人说APP根目录的gradle文件增加如下代码:allprojects{ ...

2019-10-10 12:25:09 3501 1

原创 Android EventBus事件总线源码解析

基本使用步骤1)定义事件Eventpublic class MyEvent { public MyEvent(String id, String message) { this.id = id; this.message = message; } public String id; public String mess...

2019-09-30 17:08:23 2750

原创 Android内存检测框架:LeakCanary源码解析

public static RefWatcher install(Application application) { return ((AndroidRefWatcherBuilder)refWatcher(application).listenerServiceClass(DisplayLeakService.class).excludedRefs(Androi...

2019-09-27 17:04:29 2948

原创 使用LeakCanary快速简单排查Android中的内存泄露

1)在项目的build.gradle文件添加: debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' testCompile 'com.squareup...

2019-09-26 16:42:28 3174

原创 Android内存检测框架:LeakCanary源码解析

1.前言前面文章已经讲解过如何使用LeakCanary快速的排查Android中的内存泄露,链接地址:LeakCanary-------快速简单排查Android中的内存泄露,这篇文章将从源码的角度分析LeakCanary排查内存泄漏的原理。2.主要原理通过registerActivityLifecycleCallbacks(Application.ActivityLifecycleCall...

2019-09-24 12:32:08 3337

原创 Android性能优化之冷启动优化

1.前言APP冷启动比较慢,点击桌面图片需要用户等待很久,体验较差。目标:启动时间缩短1000ms2.APP启动方式冷启动(Cold start)场景:冷启动是指APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动。可见冷启动的必要条件是该APP进程不存在,这就意味着系统需要创建进程,APP需要初始化。在这三种启动方式中,冷启动耗时最长,对于冷启动的优化也是最具挑战的。...

2019-08-26 19:35:18 3604

原创 R文件报错的原因

1. 前言一般R文件报错,无非是资源文件错误,图片命名错误,但是编译都会报错,可以很快解决。但是前几天,引入一个第三方aar包后,项目编译正确,但是就是R文件报错,找不到R文件,整个项目一片报红。2.错误方法Clean ProjectRebuild Project我相信很多人,第一反应就是这两个版本,但是都试了一遍后,发现依然报错。我当时把studio关闭重开了几遍,甚至电脑都...

2018-10-01 14:58:26 9273

原创 IntentService源码讲解

1. 前言Broadcast Receiver用于接收并处理广播通知,众所周知,onReceive(Context curContext, Intent broadcastMsg)方法用于接受通知,并在该方法体内处理消息,但是onReceive中代码的执行时间不要超过5s,否则会报ANR错误,导致程序异常。一般这种情况,会有两个方案:1)在onReceive方法中开启子线程,做耗时操作...

2018-06-01 00:32:36 2833 1

原创 Android HandlerThread使用介绍以及源码解析

1. 前言首先,看一下官方对HandlerThread的解释:Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.翻译中文为:Handl...

2018-05-30 21:10:32 3135

原创 Android开发MVP模式--项目实战

1 前言苏宁+App是苏宁易购集团零售云研发中心分销研发中心主要产品之一,由于项目处于初期阶段,业务逻辑复杂,导致业务需求变动快,常常在开发甚至测试过程中出现界面或者后台接口调整的情况。 App客户端如何在外部需求不断变化的情况下,降低模块耦合,尽可能减少每次代码修改量,一方面减少开发人员的工作量,另一方面降低测试工程师的工作量,最终顺利完成项目迭代开发。2 为什么使用MVP模式...

2018-01-13 11:52:24 4093

原创 Android SharedPreference 源码分析(一)

1. 前言众所周知,SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。2.基本概念SharedPr

2017-12-09 17:39:41 3191

原创 Fiddler查看Https网络请求

1. 前言fiddler抓取http网络请求相信大家都会,这边不继续说了,主要讲解如何利用fiddler抓取https的网络请求。2.使用方法正常情况下,手机无线配置完代理,可以抓取http,但是要抓https请求的时候,会发现,全部都是如下的报文。 为了可以跟https一样看到具体请求报文,需要通过如下步骤配置:1)打开fiddler–>tools–>Telerik Fiddler Option

2017-07-28 15:37:45 7061 1

原创 获取手机唯一识别码IMEI

1. 前言获取IMEI相信大家非常熟悉,但是项目中使用时,发现当手机卡为电信的时候,获取的并不是IMEI,而是MEID,什么是MEID,为什么会出现这种情况呢? IMEI国际移动设备识别码(IMEI:International Mobile Equipment Identification Number)是区别移动设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备。目前GSM和WCDMA

2017-07-28 11:45:00 26373 3

原创 Jenkins实现Android自动打包

1. 前言14年在给天天酷跑团队做sdk的算是第一次接触到Jenkins,当时有种乡下孩子进城的感觉,被jenkins流弊的体验所折服,只需要一个按钮点一下就坐等出包,不用IED繁琐的打包流程。当然自动化打包好处很多,比如定时出包,可以每天晚上12点出包;还有一种情况场景也急需解决,比如正在你本地在修改代码,突然测试要求出包,你本地代码可能一团糟,工程完全跑不起来,很不方便。当然Jenkins好处很

2017-06-04 13:44:52 8845

原创 APK瘦身之删除多余资源文件

1. 前言移动端项目迭代很频繁,一般半年左右,app包就变得很大,并且包含很多废弃的图片,layout文件,本篇文章主要讲如何快速定位出废弃资源,并快速删除。这次瘦身使用的工作是Android Studio Lint工具 , 用瘦身前APK为21.5M, 瘦身后为18.4M. 瘦身结果为APK大小减少了3.1M(14%)2.准备工作1.Android Studio Lint只能定位出废弃的资源

2017-04-17 13:29:15 4215

原创 weex项目实战篇(二)

1. 前言经常前面的准备,我们终于可以开始上手weex项目了。2.新建weex项目1)新建一个名为hongkong的项目,如图所示: 2 ) 输入项目名称 3)点击【create】则项目则创建成功 4)新建一个.we文件 5)新建一个home.we文件后,项目目录如下所示: 6)为了方便参考阿里playground中的例子源码,我们把playground源码中的examples文件夹也拷贝

2017-01-26 00:52:37 17304 8

原创 weex项目实战篇(一)

1. 前言通过前面四篇文章的介绍,相信大家对weex基本熟悉了,下面就开始动手做项目,一些细节问题,在项目实战中继续消化。2.开发工具和环境俗话说,工欲善其事必先利器,我选的IDE开发工具为webstorm,webstorm相信做前端的同学非常熟悉。我本身就是做android原生开发的,android studio非常熟悉,而这两款IDE操作界面接近相同,上手无障碍。1)下载webstorm 我用

2017-01-25 22:04:56 19149 2

原创 Android 过度渲染及优化方法--3D效果(JakeWharton大神的scalpel)

1. 前言Android 中的过度绘制是指同一个像素被绘制多次,app一个页面所显示的效果是由像素一帧一帧绘制而成,过度绘制就是意味着这一帧被绘制多次,从绘制性能角度讲,同一像素点被绘制的次数当然越少越好,这样有利于减轻 GPU 的工作压力,事实上,在具体开发过程中 ,不可避免的可能会出现过度绘制,这里,Android 系统本身在开发者选项里已经提供了一个选项开关 Debug GPU overdra

2016-12-23 17:58:11 6197 2

原创 疑难杂症之----------setContentView()报java.lang.OutOfMemoryError错误

1. 前言app用户量一大,经常遇到如下问题,今天刷崩溃日志,又看到这个错误,记录一下解决思路。java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(Bitm

2016-12-15 17:30:07 4763

原创 Android View 事件分发机制 源码解析(View篇)

1. 前言上一篇介绍了ViewGroup中点击事件传递过程,这篇主要介绍View中如何传递点击事件以及一些注意点。2.源码解析上文中讲到,dispatchTransformedTouchEvent方法会调用dispatchTouchEvent方法,点击事件从ViewGroup成功传递到View中,接下来看下dispatchTouchEvent方法的源码:/** * Pass the tou

2016-12-07 17:08:10 3838 5

原创 Android View 事件分发机制 源码解析(ViewGroup篇)

本期三篇文章目录(可点击跳转)一. Android TouchEvent事件传递机制初识 二. android点击事件传递源码讲解(ViewGroup) 三.android点击事件传递源码讲解(View) 1. 前言android点击 事件一直以来都是很多安卓程序员的心病,之前通过demo模拟总结出一些经验,但是不看源码的程序员不是好程序员,这段时间,系统的梳理了下整个事件传递的源码,希望可以

2016-12-06 20:11:12 5975

原创 android webview一篇文章全面了解(基本使用,url拦截,js跟java交互)

1.前言最近几年混合应用越来越流行,及一部分功能用原生代码开发,一部分功能用html5实现。那什么时候用原生什么时候用网页呢?很多人第一反应就是经常变化的页面用网页开发,避免经常发包,不全对。其实因为网页使用体验远远不及原生开发,所以一般有以下两种情况建议使用网页代替原生: 1.试水功能 2.类似双11主会场,这类只在固定时间内使用的功能。2.基本使用方法1)xml布局:<?xml versio

2016-11-22 19:23:22 11408 3

原创 RecyclerView详细介绍-----多item布局(三)

1.前言前面两篇文章主要介绍了recyclerview的基本使用,接下来介绍复杂一点的需求。 我们之前用listview的时候肯定遇到itemType>1的时候,我们定义多套item布局,借助getItemViewType()实现多套布局。但是如果像淘宝首页,上面是listview的一个一个item,下面确是一个GridView的话,我们如何实现呢?当然之前有人会把GridView用ListVie

2016-11-11 21:17:03 5850 1

原创 RecyclerView详细介绍-----解决点击事件,刷新错误(二)

RecyclerView基本使用可参考:RecyclerView详细介绍(一)1. 前言RecyclerView 没有提供类似ListView的setOnItemClickListener方法,所以只有我们自己为RecyclerView添加点击事件, 本篇文章主要介绍如何添加点击事件,进行Item增加和删除,并且解决RecycleView Adapter使用notifyItemRemoved和not

2016-11-10 17:48:12 6494 2

原创 RecyclerView详细介绍----基础使用(一)

1. 前言RecyclerView 是Android L版本中新增加的,相信很多人都听说他可以完美代替Listview,Gridview。那他到底比Listview,Gridview强大在哪里呢,今天主要从使用上来带大家入门,性能后面再单独讲解。ListView大家都非常熟悉了,使用ListView一般就三个步骤: 1)初始化ListView 2)创建adapter适配器(一般继承baseAda

2016-11-08 23:00:24 3397

原创 过时api-Android LocalActivityManager的用法

1.前言今天碰到一个问题,我的一个activity需要加载别人的另外一个activity,可能你会说用fragment嘛,但是我们两个属于不同的业务部门,各自平行开发,他不可能单独为了写个fragment,但是我要显示他activity的内容,这时就用到了LocalActivityManager类。2.使用步骤1)在我的activity中初始化一个父容器LinearLayout linear= (L

2016-10-26 16:18:22 8074

进程守护demo|Notification.zip

进程守护demo

2016-05-12

android 图片OOM 内存溢出

android eoe讲解图片OOM 内存溢出处理

2013-12-10

图片说明Andorid中ImageView的不同属性ScaleType的区

图片说明Andorid中ImageView的不同属性ScaleType的区别

2013-12-04

android源码下载编译

此文档详细记录了本人ubuntu下搭建ubuntu环境,android源码下载环境,下载android 4.0.3源码及编译的过程。如果有问题,可以直接来问我。

2013-07-23

高德地图api理解

高德地图api接口和demo程序的理解。

2013-05-30

android百度一面面试题

百度android开发一面的面试题,问的问题还是有点深的。

2013-05-25

xml数据解析

自己写的xml解析,dom,sax,pll,很简单。

2013-03-22

数据库操作

android数据库操作,增删改查,很好很全面。

2013-03-14

LeakCanary-------内存泄露检测开源库

LeakCanary-------内存泄露检测开源库

2016-12-29

过度渲染 ScalpelFrameLayout

过度渲染 JakeWharton ScalpelFrameLayout

2016-12-23

mvp demo test

博客地址:http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/51317956 mvp demo讲解

2016-11-30

webview demo

webview js 跟java 交互

2016-11-22

recyclerview 实现多itemtype

recyclerview 实现多itemtype类型

2016-11-11

RecyclerView

RecyclerView 点击事件处理

2016-11-11

RecyclerView demo

RecyclerView 实现瀑布流 Listview Gridview

2016-11-11

weex demo test

weex demo

2016-10-08

listview局部刷新

listview局部刷新demo

2016-09-07

沉浸式状态栏

沉浸式状态栏demo

2016-09-07

android 图片跟随手指滑动

android 图片跟随手指滑动

2016-07-20

view的滑动

view的滑动在安卓中特别多,基本有三种方式: 1.通过view本身提供的scrollTo/scrollBy方法实现滑动。 2.通过给view添加平移动画实现滑动。 3.通过改变view的layoutparams使得view重新布局,从而实现滑动。

2016-07-20

android机型适配讲解

android机型适配讲解,从概念,设计,适配方案详细讲解android机型适配

2016-07-18

aidl 代码示例

AIDL-demo

2016-07-01

android项目架构

android项目架构 修改点:增加网络请求取消操作

2016-06-17

eventbus demo

eventbus demo

2016-06-15

android开发编码规范

android开发编码规范

2016-06-14

项目架构搭建

android项目框架

2016-06-12

Android TouchEvent事件传递

Android TouchEvent事件传递机制

2016-05-20

Android TouchEvent事件传递机制

Android TouchEvent事件传递机制

2016-05-13

android-support-multidex.jar

android-support-multidex.jar

2016-05-12

进程保护demo最新版

进程保护demo最新版

2016-05-12

进程保护demo

进程保护demo

2016-05-11

androidmvp

android mvp模式实现demo

2016-05-04

greendao-demo

greendao-demo

2016-05-03

空空如也

空空如也

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

TA关注的人 TA的粉丝

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