- 博客(86)
- 收藏
- 关注
原创 《成为乔布斯》读后感
前言《成为乔布斯》应该是我看过的关于乔布斯的第三本书,我最喜欢的就是这本。这本书给我了很多新的思考,与前两次对比,这一次给我的感受有了很大的不同。读后感我喜欢这本书的原因是在于这本书给我的感觉很真诚,作者本身对于乔布斯的认识非常理性,也非常全面。除了大众都知道的乔布斯很牛逼,是个天才外,作者花了更多篇幅在展示细节以及很多事件的经过。还有一方面是翻译过来的质量也比较好,整体读起来很顺心,舒畅。...
2019-01-18 12:26:00
1427
1
原创 解决TaskExecutionException: Execution failed for task(app:transformClassesWithDexForDebug)
前言最近在开发中频繁遇到org.gradle.api.tasks.TaskExecutionException: Execution failed for task这个问题,导致无法编译通过。这里我给出自己的解决办法。分析1.自定义属性检查attrs.xml文件中有没有相同的属性名(我在编译的过程中会给出错误的提示):重命名属性提取属性,作为公共的属性<attr name=...
2019-01-16 11:58:05
5707
原创 警告信息“Nested weights are bad for performance”的消除方法
原因分析在布局进行嵌套使用时,父布局与子布局都使用了android:layout_weight,但不是必须使用时,便会出现如题所示的警告信息。解决方法根据实际情况,去除子布局中非必须使用的android:layout_weight。<LinearLayout android:layout_width="match_parent" android:lay...
2019-01-08 17:25:52
1101
原创 BottomSheetDialog基础设置
BottomSheetDialog dialog = new BottomSheetDialog(_mActivity);dialog.setContentView(view);//设置BottomSheetDialog的默认初始高度BottomSheetBehavior sheetBehavior = BottomSheetBehavior.from((View) view.getPare...
2019-01-08 17:23:10
1179
原创 自定义LayoutManager,实现RecyclerView折叠效果
少废话,先看效果图!分析根据效果图我们不难看出:我们需要实现列表的折叠与展开的效果,也就是说RecylerView需要有两个状态:一个是展开状态,其实展开状态就是常规的LinearLayoutManager;另外一个是折叠的状态,这个就需要我们自定义LayoutManger实现了。实现public class StackLayoutManager extends RecyclerView...
2018-12-30 16:05:19
2574
2
原创 工作第一年就被裁?
前言2018年11月23号,我被公司裁掉。对于我一个2018年应届毕业生来说,这是一件很大的事情。我决定用文字记下这一段时光,希望能够给未来一点准备。经过2018年11月20日,公司召开全体员工大会,大会上主要宣布了两件事情:一、公司加入了一名人事主管(现在看来,招她来的目的之一就是清理人)。二、老板宣布对人员进行一定的调整,人事部门会跟全体员工沟通。这是我知道要裁员的最早信号,但是对于裁员...
2018-12-13 11:55:48
529
2
原创 圆形图显示问题
开发中如果使用了CircleImageView等第三方圆形控件,如果你又恰好使用Glide作为加载图片,那么在第一次加载图片的过程中可能会出现只显示占位图,但图片没有显示的问题。以下会介绍几种解决方法。第一种解决方式是改变Glide显示图片的方式: Glide.with(this) .load(url) .asBitmap() .ce...
2018-11-15 11:04:15
342
原创 获取View显示区域的百分比
/** * 获取view当前占据屏幕的百分比 */private int getVisibilityPercents(View currentView) { int percents = 100; Rect rect = new Rect(); //防止出现视频已不在可见得范围之内仍然返回100(完全可见) boolean is...
2018-11-14 13:51:05
3129
2
原创 《卡片夹》1.6.0更新了啥?
《卡片夹》1.6.0版本已经发布,新增与优化了很多内容。你难道不去下载试试?1.6.0主要更新了以下内容:为图片添加文字信息现在添加图片以后也可以给文字配上必要的文字信息,在首页的图片卡片上也会显示相应的文字信息。优化添加文本操作体验之前的版本出于便捷的考虑把文本添加设计的比较简单,默认只显示了一个输入框,当时也觉得不妥,但是时间比较仓促,所以没有更改。1.6.0的版本中已经优化了使...
2018-10-23 13:57:09
356
原创 Window & Window Manager
Window表示一个窗口的概念;Window是一个抽象类,具体的实现是PhoneWindow。通过WindowManager来创建Window。Window的具体实现在WindowManagerService中。WindowManager和WindowManagerService的交互是一个IPC过程。1.Window &amp; WindowManager添加Window: mWindo...
2018-10-15 18:01:22
339
原创 四大组件的工作过程
1.运行状态四大组件除了BroadcastReceiver以外,其他三种都必须在AndroidManifest中注册,BroadcastReceiver可以在AndroidManifest也可以在代码中注册。调用方式上:Activity, Service, BroadcastReceiver需要借助Intent,而ContentProvider无须借助Intent.Activity : 前台...
2018-10-15 18:00:53
385
原创 Android的消息机制
综述Android的消息机制主要是指Handler的运行机制。Handler的运行需要底层的MessageQueue和Looper的支撑。Looper中存在一个特殊的概念:ThreadLocal,它并不是线程,作用是可以在每个线程中存储数据。Handler创建的时候会采用当前线程的Looper来构造消息循环系统,Handler如何获取?使用ThreadLocal。注意:线程默认没有Looper,...
2018-10-15 18:00:05
269
原创 Android的线程和线程池
主线程与子线程主线程:UI线程(作用:运行四大组件以及处理它们和用户的交互)子线程:执行耗时任务,比如:网络请求,I/O操作等Android中的线程形态AsyncTask(串行执行)轻量的异步任务类,可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。AsyncTask封装了Thread和Handlerpublic abstract clas...
2018-10-08 17:43:29
332
原创 Bitmap的加载和Cache
Bitmap的高效加载加载Bitmap : BitmapFactory decodeFile 、decodeResource、decodeStream、decodeByteArray高效加载Bitmap的核心思想: 采用BitmapFactory.Options , 使用inSampleSize(采样率)参数来缩放图片;若为1则采样后的图片大小为图片的原始大小,当inSampleSize大于1...
2018-10-08 17:42:32
287
原创 Crash与Multidex
1.捕获应用的crash信息原理:当crash发生时,系统会回调UncaughtExceptionHandler的uncaughtException()方法;Thread类中提供了一个设置系统默认的异常处理器方法;使用multidex解决方法数越界原因:在Android中单个dex文件所能够包含的最大的方法数为65536范围:包含Android FrameWork、依赖的jar包以及...
2018-10-08 17:41:19
280
原创 帮助你整理碎片信息的App——《卡片夹》
前言本人在过去的四五个月时间里利用业余时间开发了一款app——《卡片夹》。这款app的主要功能是帮助你整理生活中的碎片信息(通知、联系人、地址、银行卡信息等)。下面我会通过自问自答的方式来阐述开发《卡片夹》的原因、产品特色以及规划等。想要解决什么痛点?你有没有过别人发给你一条消息你需要保存起来,可是当你需要它的时候你已经找不到了。你的通讯录里是不是会保存一些你一辈子只会打给他一次的联系人...
2018-10-08 17:39:46
3085
3
原创 Drawable
Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念。Drawable的优点:使用简单,比自定义View的成本要低非图片类型的Drawable占用空间较小,利于减少apk的大小1.简介Drawable有很多种,表示一种图像的概念。Drawable是一个抽象类,它是所有Drawable的基类。Drawable的内部宽高参数比较重要,获取方法:getI...
2018-09-14 13:42:08
514
原创 Android中的动画
1.分类View动画帧动画属性动画2.View动画View动画的作用对象是View支持四种效果: TranslateAnimation , ScaleAnimation , RotateAnimation , AlphaAnimation定义:可以在代码中,也可以在xml文件中(建议)需要在res目录下新建anim文件夹,对应的标签: set , transla...
2018-09-14 13:40:42
274
原创 View的工作原理与自定义View
1.ViewRoot &amp; DecorViewViewRoot (ViewRootImpl) : 连接WindowManager 和 DecorView的纽带 root = new ViewRootImpl(view.getContext() , display); root.setView(view , wparams , panelParentView)...
2018-09-07 09:44:59
453
原创 RemoteViews
1.应用通知栏小部件RemoteViews只支持特定的ViewPendingIntent的典型的使用场景:给RemoteViews设置点击事件2.内部机制通知栏和小部件分别由NotificationManager and AppWidgetManager管理,而NM 和 AWM通过Binder分别和SystemServer进程中的NotificationManager...
2018-09-07 09:43:35
281
原创 View的事件体系
1.什么是ViewView是Android中所有控件的基类,View是界面层的控件的一种抽象。2.位置参数在Android中,x轴和y轴的正方向分别为左上角的右和下;view的位置由四个顶点决定:top , left , right , bottom;Android3.0以后新增x , y translationX , translationY;关系: x = le...
2018-09-01 11:40:22
281
原创 IPC机制
Android IPC简介IPC: Inter-Process Communication, 含义为进程间通信或者跨进程通信,指两个进程之间进行数据交换的过程。使用场景:多进程Android中的多进程模式正常情况下,在Android中多进程是指一个应用中存在多个进程的情况。使用多进程方法:给四大组件在AndroidManifest中指定android:process属性...
2018-09-01 11:38:23
1305
原创 Android开发中那些相见恨晚的小技巧(一)
前言放心,以下所提到的都已经在项目中被证实有效,可安心食用。RecyclerView滑动时FAB自动隐藏 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(...
2018-08-20 18:14:55
405
原创 记一件小事
不知不觉中,我已经坚持写博客四个月了,我是从四月份开始写,每个月大概三篇文章左右,写到现在已经有二十多篇文章了。现在我博客的访问量是两千三百多,由于是我自己的博客,所以每天上班前都会打开看一下。在我模糊的记忆里,我记得达到一千的访问量大概花了我三个月的时间,这里面的主要原因有两个:一个是文章质量,这个我是承认的,由于我四月份才实习,所以就工作经验和知识沉淀上是没有多少货的,当然我现在也在努力的...
2018-08-14 09:27:41
590
转载 回望十年Android
前言本人作为Google信徒,Android狂热粉丝(Android开发者,原生党,目前主力机Google Pixel XL ,测试机 Google Nexus 5),对于Android可谓是爱的情深意切。昨天我在路上刷酷安,看到一篇盘点Android历史的文章,觉得写的挺有意思的,经原作者的同意,本人把原文搬运过来了。在此,非常感谢原作者!原文链接:https://www.coolapk...
2018-08-09 18:29:26
766
原创 在代码中正确获取View宽高的四种方法
前言在介绍正确获取View宽高的方法之前,我们先看一下,如果直接在代码中用View.getWidth() / View.getHeight()看看能不能获取到View的宽高。其实不用写demo,你应该也能猜到,如果这种方式都可以,那我就没有必要在向你介绍正确的方法了。但是我们要抱着学习的心态(自己掉过的坑才是自己的)来掌握方法。少废话,直接上代码! <?xml vers...
2018-08-01 12:38:15
6749
1
转载 Android开发技巧——定制仿微信图片裁剪控件
本文转载自:Android开发技巧——定制仿微信图片裁剪控件 原文链接:https://blog.csdn.net/maosidiaoxian/article/details/50828664 Android开发技巧——定制仿微信图片裁剪控件 &lt;div class="article-info-box"&gt; &lt;div class="...
2018-07-18 13:55:27
2346
转载 自定义控件之区域(Region)
前言:最近几天对画图的研究有些缓慢,项目开始写代码了,只能在晚上空闲的时候捯饬一下自己的东西,今天给大家讲讲区域的相关知识,已经想好后面两篇的内容了,这几天有时间赶紧写出来给大家。有关界面开发的东东内容确实比较多,慢慢来吧,总有一天会不一样。我自己的一句警言,送给大家:想要跟别人不一样,你就要跟别人不一样。—– Harvic&nbsp;相关文章:《Android自...
2018-07-16 14:48:15
1090
原创 为什么有人喜欢原生?
前言在国内的话,对于绝大多数的消费者来说如果决定购买安卓智能机,那基本上意味着他所使用的系统都是经过第三方手机厂商定制过的。提供定制系统的主流厂商有:三星,小米,华为,魅族,OPPO,VIVO,中兴,金立,锤子等。这类系统的特点就是看着和谁都不一样(排除IOS)。还有一类厂商提供着类原生的系统,提供这类系统的厂商有:一加,诺基亚,HTC,索尼等。这类系统的特点就是在原生系统的基础上画画...
2018-07-09 18:33:01
1055
2
转载 从零开始搭建Android组件化框架
本文转自: [从零开始搭建Android组件化框架] (https://www.jianshu.com/p/ba32488f9555) 问题在已经开发过几个项目的童鞋,如果这时需要重新开发一个新项目,是否需要自己重新搭建框架呢,还是从老项目中拷贝粘贴? 我们是否可以封装一个底层的lib库,这个底层的公共基础库 包括了一些第三方库(如: okhttp, retrofit...
2018-07-06 10:30:09
1782
原创 使用ARouter实现拦截登录功能
@Interceptor(priority = 1)public class LoginInterceptor implements IInterceptor { private static final String TAG = "LoginInterceptor"; private Context mContext; @Override public v...
2018-07-02 14:44:46
8090
原创 一个Demo带你了解编译时注解
概要之前在项目中使用到Dagger2,在查看源码的过程中产生了一些疑惑。为什么我使用@Component , @Module , @Inject注解就可以实现依赖注入呢?于是我带着这个疑惑开始学习注解相关的一些知识,希望能通过一个Demo来了解它的原理。demo地址:https://github.com/chrissen0814/AnnotationDemo本文的目的是探究编译时注解的...
2018-06-27 10:51:06
680
原创 解决Windows下error parsing xml not well formed invalided value 错误
解决Windows下error parsing xml not well formed invalided value 错误问题分析根据报错的内容,错误应该是解析xml文件时非法的格式错误如果你遇到这个错误,你应该会猜测是编码格式的问题,那么恭喜你你已经距离解决问题又近了一步。问题解决在gradle.properties文件中添加org.gradle.jvmargs=-...
2018-06-19 12:43:43
640
原创 面试没你想象中的难,拿Offer也可以很轻松
前言首先祝大家端午节安康!大概在一个月前就已经打算写一篇关于我三月份面试的一个总结了,但由于没有时间在加上还没有想好该怎么写,所以一直没有写。适逢端午佳节,有了一段相对较长的时间可以理理所以决定下笔。正如标题所说:目前我是一名安卓实习生,现在在上海工作。我在三月份有一段将近半个月左右的面试经历,期间跑过南京,杭州和上海;总共面试了应该有六七家公司,拿到几个Offer就不说了,没有多...
2018-06-18 15:37:01
6711
2
原创 细谈RecyclerView:(三)两行代码带你实现不一样的RecyclerView
如果我们正常使用RecyclerView的话,那我们实现的效果就应该和上面的一样:当我们进行滑动的时候,RecyclerView中的Item停止的位置是取决于你滑动时的速度(Fling),可能会出现的情况是最终我们停止的位置可能位于两个item之间,当然也有可能正好位于某个item的中间。如果这个时候我们的产品经理提出最终停止的位置一定要在某个Item上,不能出现位于两个之间的情况;或者产...
2018-06-14 16:34:35
2104
转载 AsyncTask源码分析
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11711405我们都知道,Android UI是线程不安全的,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制。之前我也写过了一篇文章从源码层面分析了And...
2018-05-30 14:52:09
307
原创 ConstraintLayout 1.1新特性使用与详解
就在最近,Constraint Layout1.1迎来了稳定版的更新。1.1版本也带来了很多新特性,今天我们就来学习一下1.1中那些新特性。什么?你还没有使用过Constraint Layout,那你可真是out了,这么棒的东西你竟然没用过,唉~~由于这篇文章的内容主要是讲1.1的新特性,但考虑到的确有的读者可能还没有使用过Constraint Layout,所以在这推荐一篇文章: Constra...
2018-05-02 11:39:04
1949
原创 Kotlin学习笔记:扩展函数
定义:在一个类上增加一种新的行为,甚至我们没有这个类代码的访问权 限。这是一个在缺少有用函数的类上扩展的方法;Kotlin中扩展函数的一个优势是我们不需要在调用方法的时候 把整个对象当作参数传入。扩展函数表现得就像是属于这个类的一样,而且我们可 以使用this 关键字和调用所有public方法。//给Context类添加了toast扩展函数fun Context.toast(message : ...
2018-04-10 18:28:26
341
原创 Kotlin学习笔记:变量和属性
在Kotlin中,一切都是对象。没有像Java中那样的原始基本类型。这个是非常有帮 助的,因为我们可以使用一致的方式来处理所有的可用的类型。基本类型数字类型不支持自动转型val i : Int = 7val d : Double = i.toDouble()字符(Char)不能作为数字直接处理val c : Char = 'c'val i : Int = c.toInt()位运算使用"and...
2018-04-10 18:25:44
513
原创 Kotlin学习笔记:类和函数
类定义:class关键字你只需要在 类名后面写上它的参数。如果这个类没有任何内容可以省略大括号class Person(name : String , surname : String)类继承:默认任何类都继承自Any类,默认所有类都不可以继承,需要用关键字open/abstract修饰class;继承使用符号:class Person(name : String , surname : St...
2018-04-10 18:15:21
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅