自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android内存缓存LruCache源码解析

LruCacheLruCache是Android提供的基于最近最少使用算法的缓存策略,该策略根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。LruCache的原理是在内部由LinkedHashMap维护了一个队列,队列按照访问时间排序,head访问时间最早,tail访问时间最晚。当队列长度超过设置的最大长度时,则从head开始挨个删除,直...

2020-03-26 19:42:02 239

原创 EventBus源码解析

​ EventBus是Android平台上一个发布/订阅事件总线,使用EventBus可以方便的在不同的组件中进行消息通信,避免不同组件之间的耦合。EventBus或者类似的事件总线基本上是各个项目中的标配。本文主要基于3.2.0版本介绍EventBus的实现方式。EventBus的基本流程​ 如上图所示,EventBus的核心架构是通过post()方法把Event交给EventBus,由E...

2020-03-23 17:08:16 332

原创 粒子动画的使用和原理

什么是粒子系统粒子系统通过发射许多微小粒子来表示不规则模糊物体。粒子系统常用于游戏引擎,用来实现火、云、烟花、雨、雪花等效果的实现。通俗来讲,在Android中,一个粒子就是一个小的Drawable,比如雨点图片。而粒子系统的作用就是不停生成雨点并按照一定的轨迹发射,以实现下雨的效果。Android如何实现粒子系统动画Android目前并没有自带粒子系统,有一种说法是通过OpenGL实现,但...

2019-12-21 22:01:08 2469

原创 事件分发的源码解析

Activity对事件分发的处理点击事件产生之后,最先传递给当前Activity,由Activity的dispatchTouchEvent进行分发。 public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { ...

2018-10-29 15:12:08 260

原创 JVM内存模型和垃圾回收

在开发过程中,常接触到内存内存,但内存究竟长什么样呢?JVM内存模型jvm中将内存分为程序计数器、Java虚拟机栈、本地方法栈、堆、方法区五个部分。其中Java虚拟机栈、本地方法栈和程序计数器是每个线程独有的,而堆和方法区是所有线程共享的。下面分别介绍各个内存区域。程序计数器(PC,Program Counter Register):每个线程都有自己的程序计数器,主要用来记录...

2018-09-05 21:53:43 289

原创 AsyncTask的使用和工作原理

简介AsyncTask是一个轻量级的异步任务类,封装了Handler和Thread,可以方便的在线程池里执行后台任务,并把进度和结果发送到主线程并在主线程中更新UI。AsyncTask应该用来执行比较短的后台任务,一般是以秒为单位的。如果需要保持线程长期运行,建议用线程池进行。一个AsyncTask是一个抽象的泛型类,通过继承的方式来使用。AsyncTask需要指定三个三个泛型参数的类型,...

2018-08-27 12:04:12 873

原创 Handler的工作原理

概述Handler机制主要由Handler、MessageQueue、Looper三个类实现。Handler把Message放进MessageQueue里,Looper循环读取MessageQueue中的消息,然后交由消息的target处理,也就是交由Handler处理。由于在Thread A中调用sendMessage()方法,Looper在Thread B中运行处理消息,因此能实现线程的切...

2018-08-24 16:33:41 831

原创 图片加载和它的内存们

在Android设备中,内存的分配是有限的,每个APP分配一定的内存空间,当内存使用达到一定的阈值,就会触发GC,当内存超过最大内存,就会OOM然后就凉凉。因此,内存是相当珍贵的,一个流畅的APP需要做好内存优化。而图片,尤其是大图,是特别消耗内存的,江湖人称“内存杀手”。一张图片到底占用多少内存在计算图片占用内存之前,需要厘清两个概念。图片占用内存大小图片占用内存大小不等同...

2018-07-25 16:43:00 544

原创 adb不停断开重连怎么破

这两天遇到一个诡异的问题,手机通过usb连接AndroidStudio,不停的断开重连,循环反复,导致log也看不了,debug也debug不了,气得我搬起电脑就想砸,只是想到电脑太贵了赔不起才勉强控制住自己。然后才按耐住焦躁的心情,进行了一波详细的排查。接触不良第一反应猜测是接触不良引起的。做了两个尝试,由于另一个手机充电困难,暂时没有检查手机充电接口的问题。更换usb接口,无...

2018-06-28 21:59:28 10328 2

原创 AndroidStudio build流程

IDE的存在使得Android项目的编译变得简单,只需要点击运行,编译安装都由IDE完成。那么项目从代码到APK之间,到底经历了什么。 Android Apk编译流程打包资源文件,生成R.java 使用aapt工具,把xml格式的资源文件编译成二进制格式,assets、raw文件夹中的文件不作处理;赋予非assets文件id值,id值以常量形式保存在R.java中。生成resourc...

2018-06-22 14:56:50 1088

原创 告别Can not perform this action after onSaveInstanceState

转载请注明出处:http://blog.csdn.net/forevercbb/article/details/79131792 最近又在应用中遇到Can not perform this action after onSaveInstanceState这个bug,对于这个bug是有所了解的,但一下子仍然没看出来是为什么,因此在解bug的过程中重新梳理一下相关的逻辑,并做相应的记录。真正掌握co

2018-01-22 17:51:29 283

原创 Android动态权限申请

转载请注明出处:http://blog.csdn.net/forevercbb/article/details/79131740 从Android 6.0开始,权限不再是在manifest文件中粘贴一下即可,这时候权限也正式走进大家的视野。项目的6.0适配就是我做的,当时没有仔细总结,最近在另一个项目添加权限的时候发现,同一个功能都没有添加申请权限的代码,一个会挂一个不会,花了几个小时在这个小问

2018-01-22 17:47:19 6435 2

原创 PopWindow的demo

PopWindow在自定义菜单或者自定义弹出控件时比较常用,相对于其它的控件,PopWindow有较高可定制程度,可以实现更多的效果。但是PopWindow使用时容易出现一些不符合预期的问题,比如点击外部PopWindow不消失,点击菜单PopWindow消失了又出现等等。这是因为有的属性不易理解。这里分享一个利用PopWindow自定义了底部弹出菜单的demo,当然也可以通过位置的设置改变为系统菜

2016-05-09 17:43:56 745

原创 Handler机制使用法则

转载请注明出处:什么是Handler?(翻译自Handler源码文档,英语渣,凑活看。英语好的可以看源文档。) Handler允许你发送和处理Message,将Runnable对象和线程的MessageQueue相关联。每一个handler实例关联一个线程和线程的消息队列。当你创建一个新的Handler,它是绑定到创建它的线程以及消息队列中。从这一点上来看,它将传递消息和runnable对象,并且

2016-05-02 12:36:37 763

原创 Volley的基本使用

Volley是一个比较常见的网络请求库,可以简单的进行http通信,也可以用来加载网络上的图片。Volley比较小巧,因此本身自带的请求类型较少,但是具有很强的拓展性,可以方便的进行自定义,使用起来非常灵活。最近使用到一部分功能,将基本的使用进行分享,说是基本,就真的是很基本。另外,前排感谢郭霖大神的文章http://blog.csdn.net/guolin_blog/article/details

2016-04-30 14:37:57 671

原创 AndroidStudio使用过程中遇到的bug(持续更新)

转载请注明出处:http://blog.csdn.net/forevercbb/article/details/51037833 由于Google不再支持Eclipse之后,转向Google的亲儿子——AndroidStudio是必然的,但是AndroidStudio的配置以及使用都比Eclipse复杂,不熟悉的情况下经常会遇到一些莫名其妙的问题,导致应用无法正常编译。代码出现的bug可以根据错

2016-04-01 16:23:58 25581 1

原创 Glide加载图片into(Target)导致OOM异常

最近在项目中遇到Drawable转换成Bitmap的需求,Glide加载的Drawable对象,而需要的是Bitmap对象。于是找到一个可以使用的方法,但是程序运行之后出现OOM异常,通过AndroidStudio自带的内存检测工具观察得到在加载图片的时候,memory的使用大约增长了几十M。经过对该方法的检查,drawable.getIntrinsicWidth()加载的是原图片的长宽。而Glid

2016-03-31 16:30:02 9890

转载 【Android 应用开发】GitHub 优秀的 Android 开源项目

原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditText、TableVi

2016-03-15 10:05:11 3656

原创 Toolbar使用说明

Toolbar的基本使用由于ActionBar的局限性,Google引进Toolbar取代ActionBar,Toolbar可以更方便及更大程度的进行自定义。最近也是初浅的使用了一下Toolbar,也遇到一些问题,这里分享一下Toolbar的正确使用姿势。 包括Toolbar的使用方法和实现方法。

2016-03-14 19:57:40 2831

原创 Glide的使用大法与内伤治疗方案

Glide库的使用方法和技巧以及Glide常见问题的解决方法

2016-03-14 17:40:26 4547

原创 Android加载缩略图的几种方法

Android加载缩略图的几种方法通过MediaStore获取缩略图让系统生成缩略图BitmapFactory创建缩略图ThumbnailUtils加载缩略图采用框架加载缩略图

2016-02-05 13:14:29 8696

空空如也

空空如也

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

TA关注的人

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