
Android API 分析和理解
文章平均质量分 92
SimplePeople
这个作者很懒,什么都没留下…
展开
-
深入理解System.arraycopy内部原理
深入理解System.arraycopy内部原理 以前面试的时候总会被人问起一些Java里面的很多的东西,比如说ArrayList和Vector内部是如何实现当时我心里就一万个的草泥马,平时我们都不是只管用吗,只要会去使用就行了,管它其他的什么乱七八糟的。后来被人问多了就会慢慢的带着好奇心去看了。下面我就以android-19的api来进行分析,因为Android大部分的源代码都已经开源了而且都比较完善的,可以直接还可以看到jni层的代原创 2021-01-10 23:11:38 · 2664 阅读 · 1 评论 -
Android HandlerThread 分析
前言在上一篇文章中我们对Handler、Looper、MessageQueue的内部实现原理以及实现。我们大部分的时候都是将消息从子线程发送到主线程来进行处理。就是说 Handler的 handleMessage 方法是在主线程中执行。下面我将介绍的这个类则完全相反:在主线程发送消息但是在子线程里面处理消息,也就是说 handleMessage 是在子线程中执行的,这个时候我们就不能在这个方法执行 UI的更新操作了。示例代码public class MainActivity extends AppCo原创 2020-07-07 18:08:12 · 307 阅读 · 0 评论 -
Android Handler、Looper、MessageQueue分析
前言最近在面试的时候总是被问题Handler、Looper这几者之间的关系,其实自己本来就已经烂熟于心的了,问多了问的特别的烦,于是乎就把这篇总结在搬上来翻炒一下吧。其实这个类是一个非常重要的类,因为我们需要在异步线程里面更新界面操作的话都是需要用到这个类的;还有一个目的是为我后面分析HandlerThread、IntentService、BlockCanary框架做铺垫。使用示例public class MainActivity extends AppCompatActivity {原创 2020-07-05 20:33:16 · 372 阅读 · 0 评论 -
深入分析 ViewStub 原理
前言最近在面试的时候被面试官问到ViewStub内部是如何使用占位的时候,我是一脸懵逼,说实话我之前对UI上的一些控件内部的代码看的非常少,所以一时答不上来,这个东西其实并不说有多难,而是我们平时在开发的过程中只是简单的去调用了一下但是并没有深入的去了解其内部的原理。其实面试的过程就是我们一个查漏补缺的过程中,让我们的各个知识面都更加的能提高,同时做到知其然更知其所以然。介绍平时我们在开发Android的界面的时候,如果遇到不需要显示的控件或者是布局的时候挺通常我们都会将其设置为View.Gone或者原创 2020-06-21 13:05:16 · 1090 阅读 · 0 评论 -
Android CopyOnWriteArrayList 分析
说明CopyOnWrite容器我们可以理解为写的时候复制的容器,最简单的理解就是当我们往里面添加元素的时候,不直接往当前的容易添加,而是先将当前容易拷贝一份,复制成一个新的容器,然后在新的容器里添加元素,添加完元素以后,再将原容器的引用指向新的容器。这样子我们就非常轻松的实现了读写分离的操作。从单词的后半部分来看其内部存储跟ArrayList都是使用了数组进行数据存储的,而且添加、修改、删除、查询数据的方法名字都是一样的。类结构图源码分析主要属性//这个变量主要是用于同步代码加锁使用 syn原创 2020-05-31 14:43:34 · 868 阅读 · 1 评论 -
Android PriorityQueue 分析
前言我们之前之前接触过很多数据结构,比如数组、栈、红黑树,队列,链表,二叉树等等。我们都知道队列是一种遵循先进先出(First-In-First-Out)的模式,但在有的时候我们需要在队列中基于优先级处理对象的。比如说下面几种情况:作业系统中的调度程序,当一个作业完成后需要从所有等待调度的作业选择一个优先级最高的来执行,并且也可以添加一个新的作业到优先队列中Timer定时任务中我们需要获取...原创 2020-04-19 18:42:52 · 500 阅读 · 0 评论 -
Android HttpUrlConnection 分析
前言在Java中我们经常使用HttpUrlConnection来做http网络请求,使用HttpsUrlConnection来做https网络请求的,但是在Android中我们还是可以使用阿帕奇开源框架 HttpClient来进行网络请求(Android6.0及以上废弃了),Android6.0及以上使用都是OKHttp和HttpUrConnection,我们发现很多所谓的网络请求框架都是基于上...原创 2020-04-13 16:38:22 · 360 阅读 · 0 评论 -
Android BufferInputStream 和 BufferOutputStream 分析
前言在上篇文章中我们深入的分析File Stream的读写文件的原理:通过 JNI 调用 C语言的文件操作接口,然后调用操作系统的接口去操作文件。流的操作的特性就是数据传输(一直前进,而不能往后退),在数据传输速度和处理的速度存在不平衡的,这种不平衡使得数据传输过程中进行缓存处理而释放数据处理器的资源是一种提高程序效率的机制。举个特别简单的例子,平时抽水马桶上方水槽的水是一点点积累的,如果水未积...原创 2020-04-13 16:35:15 · 1049 阅读 · 0 评论 -
Android FileInputStream 和FileOutputStream 分析
简介Java中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流。其余流操作类的都是对这四种流的一种包装了。其实严格意义来说的话FileWrite和FileReader其实也是对FileOutputStream和FileInputStream的一种包装的,都是通过对字节流的处理...原创 2020-04-13 16:02:47 · 4550 阅读 · 0 评论 -
Android Timer和TimerTask源码分析
Android平台中有许多的定时器比如说CountDownTimer和Timer,定时器就像平时使用的定时闹钟一样,在固定的时候就会执行某种任务,也在可以反复的做某种事情。其中Timer是Java老牌的定时器平时我们估计用的特别多,但是对于其内部的实现却知之甚少的。基本使用mTimer = new Timer();mTimerTask = new TimerTask() { @Ove...原创 2020-04-13 15:51:43 · 495 阅读 · 0 评论 -
Android ArrayDeque 分析
简介ArrayDeque是JDK容器中的一个双端队列实现,不过它内部使用的是数组来对元素进行操作,不允许存储null值,同时可以当做队列,双端队列,栈来进行使用。上篇文章的时候我们分析过LinkedList也是双端队列,不过用的是双向链表结构实现的。使用示例public static void main(String[] args) { ArrayDeque<String>...原创 2020-04-13 15:46:13 · 862 阅读 · 0 评论 -
Android LinkedList 分析
简介LinkedList是Collection下的一个list实现,它是一个以双向链表实现的List,除了作为List使用,还可以当做队列和栈来使用,下面我们就来看看具体的实现细节。继承关系图通过上面的继承关系图,我们知道它实现了List接口,还实现了Queue和Deque接口,所以还能作为双端队列进行使用,最后还实现了Serializable 接口,说明也是可序列化的。源代码分析模...原创 2020-04-13 15:42:08 · 754 阅读 · 0 评论 -
Android ArrayList 分析
简介在Java的集合中,ArrayList可以说是用的最频繁的一个,List是一个有序,可重复的集合,但是它确是线程不安全的,我么还可以通过索引来访问指定位置的集合元素。虽然我们平时经常的使用它但是对于它的底层的代码实现我们却一直没有怎么关注。算法速读法类结构图代码实现我们一般都是两种构造方法来创建ArrayList的。//数组中真实存储数据的长度int size;//用于存储数...原创 2020-04-13 15:36:16 · 2565 阅读 · 0 评论 -
Android LockSupport 分析
我们以前在对线程进行阻塞与唤醒的时候经常会使用Object类中的wait()和notify(),其实除了这个方式之外,Java中还提供了另外一种的方式来对线程进行挂起和恢复:LockSupport。案例演示 该类中有两个非常核心的方法park()和unpark()方法分别用于对线程进行挂起和恢复的操作,我们知道如果对线程进行了挂起的操作的话,则当前线程处于等待的状态。下面我们来模拟一下:当原创 2017-10-19 20:17:55 · 809 阅读 · 0 评论 -
Android AsynTask 分析
本次我们将来介绍一下Android的异步任务类AsynTask,相信大家平时在开发的时候经常使用。一般我们在做一些比较耗时的操作任务都会开启一个线程去执行任务,因为这样子不会阻塞UI线程,用户操作起来界面的时候才不会卡顿的,大大的增加了用户体验的,但是懒惰的工程师经常嫌弃开启一个线程在更新UI界面的时候还需要再使用Handler。这样子就可能会使得代码不美观。使用说明具体的使用我这里就不详细的写de原创 2017-05-25 16:53:05 · 453 阅读 · 0 评论 -
Android SharedPreferences 分析
我们平时在项目里保存数据的时候经常使用SharedPreferences来保存数据,比如说什么第一次启动的数据,还有一些比较轻量级的数据保存都保存在这个里面。我们平时不管是在子线程还是主线程中都可以使用这个类来获取数据和更新数据而且也没有烦人的多线程问题。使用方法存数据的两种方法:commit 和 applySharedPreferences sp = getSharedPreferences(原创 2017-05-19 19:04:51 · 669 阅读 · 0 评论 -
Android CountDownTimer 分析
有时候我们在一些特别的场景可能会需要使用到不是这么精确的倒计时的功能,比如说:发送短信验证码倒计时。有时候我们会发现这个功能也不难但是实现起来的话也挺繁琐的,这个时候系统Api就为我们简化代码封装了一个CountDownTimer的类来使用。我们平时在做这类需求的时候可能很多都会使用Thread+Handler或者是Timer + handler机制,一个简单的功能写了一大片的代码来实现,下面我们就原创 2017-06-05 16:31:22 · 2276 阅读 · 0 评论 -
Android Unsafe 分析
前两天在看Android平台上的FutureTask类的时候无意看到了Unsafe,当时这个类是报红色的属于sun.* API肿的类,并且不是J2SE中真正的一部分,因为你很有可能找不到任何的官方信息,但是你可以在Android源代码中可以找到该代码的实现以及 Native的实现,这个有利于我们的学习和使用。该类在Android4.4系统的Art虚拟机和Davilk虚拟中的代码中,其路径分别为: 1原创 2017-06-16 16:09:39 · 3891 阅读 · 2 评论 -
Android FutureTask 分析
之前在研究AsyncTask源代码的时候发现了它的内部使用了FutureTask、Future,Callable类来实现,因为之前在学习java的时候并没有接触到这些东西,于是乎就打开了百度看了半天别人的博客也没有理解其用法以及原理,后来果断的查看了一下其源代码之后才知道其来龙去脉。官方文档这么介绍FutureTask类的。A cancellable asynchronous computation原创 2017-06-08 17:28:19 · 5375 阅读 · 1 评论 -
Android ActivityLifecycleCallbacks 分析
最近产品有个需求就是需要统计前台页面的停留时间,用我们程序员的话来说就是统计Activity在前台的时间,也就是如果程序从启动开始到按home键切换到后台的时候的这段时间内。之前还不知道 ActivityLifecycleCallbacks的时候我就写了一个BaseActivity,然后所有的Activity都去继承该类。但是如果后期项目都已经做好了的话,那在统计的时候就有可能会出现统计不完整的情况原创 2017-07-07 17:31:28 · 1695 阅读 · 0 评论 -
Android SparseArray 分析
我们平时在Android平台上开发应用的时候经常会使用Java中的api去处理一些东西,但是由于Android手机的内存,cpu的处理能力等等原因,java上的api可能会处理同一个问题上可能会需要 更多的内存空间去完成。于是Android上就推出了一些自己的api去优化这些问题,比如说本章的SparseArray。 官方文档是这么介绍的: SparseArrays map integers原创 2017-06-30 16:08:00 · 1662 阅读 · 0 评论 -
Android 深入了解相册内部 一
之前在工作项目的时候遇到过要获取手机上所有图片信息的需求,也就是要在自己应用内部做一个图片选择器的功能,当产品提出这个问题的时候我当时的想法就很怀疑这个需要合理,后来我就在github上搜索到了一个挺好的图片选择的库:https://github.com/learnNcode/MediaChooser,后来集成到项目中的时候发现居然系统的相册的功能差不多的,都可以扫描出手机上的图片,而且毫无遗漏的。原创 2017-08-09 17:32:06 · 581 阅读 · 0 评论 -
Android 开启手电筒功能(完美适配4.x, 5.x, 6.x )
最近在逛GooglePlay应用市场的时候发现很多的手电筒功能居然都带有广告感觉非常的不可思议的。而且这些应用不仅仅有广告而且安装包还特别的大,我本来还想下载一个来玩玩的,后来看了他们的东西感觉也不过如此的。主要功能还是打开手电筒的功能,有没有其他的新颖的地方了,为了能让大家更好的有一个属于的自己的手电筒功能,这里我将整理一个比较完美适配各个机型的手电筒出来。 在着手准备开发的时候我们更多原创 2017-08-24 21:57:54 · 4578 阅读 · 2 评论 -
Android 深入了解相册内部 二
通过上篇博客我们知道了是系统对外暴露出来的ContentProvider来获取数据库中的图片信息的,使我们知道了如何去实现一个简单的相册了,而不是仅仅去跳转到系统中去做处理了,这么方便的操作极大的满足了我们平常的开发的一些特殊的需求。但是我们在实现完成功能之后我们更多的是要去了解其内部的原理以及是如何运行操作的这样子才能更好的有助于我们水平的提高,同时阅读别人优秀的代码也是对自己的一种提高。原创 2017-08-29 21:22:23 · 674 阅读 · 0 评论