Android
文章平均质量分 64
xlh1191860939
一个android小菜鸟
展开
-
总结:判断 RecyclerView 中 View 的可见性
获取 RecyclerView 当前屏幕中可见 item 下标我们只需要设置对 RecyclerView 设置滑动监听即可(当 RecyclerView 停下滑动时进行检测):override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { super.onScrollStateChanged(recyclerView, newState) if (newState == RecyclerView原创 2021-01-26 15:58:44 · 9501 阅读 · 2 评论 -
Retrofit源码全方面解析
如今作为一个Android开发者,网络请求这块离不开square公司的全家桶,今天我们就来分析一下其中的Retrofit框架的源码。为什么使用Retrofit因为方便、直观,和OkHttp的结合天衣无缝:@GET("weather")fun weather(@Query("latitude") latitude: String, @Query("longitude") longitude: String): Flowable<String>通过注解,对于这样的一个GET请求,请求参数原创 2020-08-19 22:45:28 · 2170 阅读 · 0 评论 -
从源码角度理解HandlerThread和IntentService
基础:需要对于消息机制的四大部分有一定了解,可以参考此篇。HandlerThread.public class HandlerThread extends Thread { int mPriority; int mTid = -1; Looper mLooper; private @Nullable Handler mHandler; public HandlerThread(String name) { super(name); ..原创 2020-07-09 12:32:03 · 520 阅读 · 0 评论 -
源码解析:在Room和Retrofit中使用协程
今天我们就来从源码的角度上分析Room ORM框架以及Retrofit是如何实现对于Kotlin协程的支持的。 前提知识:对于Kotlin协程有所了解,不了解的同学可以参考下面系列文章。 Kotlin学习系列之:协程的创建(一) Kotlin学习系列之:协程的创建(二) Kotlin学习系列之:协程的创建(三) Kotlin学习系列之:协程的取消和超时 Kotlin学习系列之:使用async和await实现协程高效并发 Kotlin学习系列之:协程上下文与分发器 核心原创 2020-06-12 14:27:46 · 853 阅读 · 0 评论 -
Android Architecture Component之:深层次理解ViewModel
上一篇我们从源码层面上分析了LiveData的内部实现,今天我们来走进ViewModel的内心。 回顾如何获取一个ViewModel实例: ViewModelProvider(this, MainViewModelFactory())[MainViewModel::class.java] 那么我们可以从ViewModelProvider的构造器入手。 ViewModelP...原创 2020-04-28 16:29:47 · 661 阅读 · 0 评论 -
Android Architecture Component之:深层次理解LiveData
LiveData是Architecture Components中的重要一员,本篇将带领大家从源码层面深层次理解它的机制。(此篇不是零基础讲解LiveData和ViewModel的使用,建议往下看的小伙伴先熟悉LiveData和ViewModel的基本使用) 使用: 首先在build.gradle中引入: def livedata_version = '2.3.0-alpha01'...原创 2020-04-11 15:21:14 · 753 阅读 · 0 评论 -
在三星(samsung)手机上使用Parcelable序列化传递数据的坑
Android中可以使用两种方式来实现序列化:Serializable和Parcelable。至于它们的实现方式和优缺点对比今天就不说了。还是来解决文章标题中提到的问题吧。现有类A public class A implements Parcelable{....}现在我想在两个Activity之间传递A类型的对象数据。发现一个奇怪的问题:唯独在三星手机上会抛出 c原创 2017-12-28 19:54:17 · 975 阅读 · 1 评论 -
基于《Android插件化开发指南》第4章对于ActivityManager hook的思考
最近在读包建强老师的《Android插件化开发指南》一书,在读到第4章对于ActivityManager hook时,有点小启发。先看hook的代码(基于Android9.0源码,兼容Android7.0之前的版本代码需改动): public class HookHelper { public static void hookActivityManager() { ...原创 2019-03-04 16:35:51 · 1133 阅读 · 0 评论 -
基于《Android插件化开发指南》第5章对于"欺骗AMS"的思考
在我们初学Android阶段经常会遇到一个异常: Unable to find explicit activity class xxx; have you declared this activity in your AndroidManifest.xml?异常信息提示的很清楚,原来我们在start一个新的Activity时,忘记在AndroidManifest.xm...原创 2019-03-07 13:54:46 · 1320 阅读 · 0 评论 -
DiskLruCache的源码分析
如何拿到一个DiskLruCache的对象? 通过DiskLruCache的open方法,因为它的构造是私有的,所以你不是能够直接new的。open方法有四个参数: directory:磁盘缓存的路径 appVersion:app的版本号,这个地方看清况传入,如果你想要当app升级时,之前的缓存失效,那么这个地方你就可以传入当前app的版本号;否则的话,缓存在app升级时仍然保留,...原创 2019-03-11 14:49:21 · 403 阅读 · 0 评论 -
AsyncTask源码深入分析和巧记线程池
一、 AsyncTask源码分析:AsyncTask是Android中用来执行异步任务的类,底层封装了线程池和Handler。虽然现在很少使用它,它的缺点也是很明显的,比如会导致严重的内存泄漏等。尽管如此,抱着学习的态度,它的源码还是值得分析的。首先还是略微就AsyncTask的基本使用来进行一些说明:它是一个抽象类,如果我们需要使用它需要创建一个类来继承AsyncTask。原创 2017-07-04 23:59:55 · 542 阅读 · 0 评论 -
文件下载与应用更新系列博客一:基本功能实现
应用更新是每个app都会有的功能模块,而文件下载在App中也经常有需要它的地方,比如我自己,公司的项目需要查看合同,所以需要先下载到本地。所以,基于这些需求,觉得需要有封装的必要性。 实际上Android中已经提供了一个DownloadManager类来实现的下载的功能,起初我也打算基于它进行封装,但是网上说某些机型的系统中已经被厂家删掉了。所谓万丈高楼平地起,从头开始:Downloa原创 2017-10-26 01:02:41 · 614 阅读 · 0 评论 -
runOnUiThread
之前一篇文章(Handler)略微分析了Android中的消息机制,然后今天贴出runOnUiThread方法的分析(笔记早就整理好了,只是一直没有整理成博客): 先对消息机制的四大对象进行一个大致的总结吧1. MessageQueue:消息队列,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作。采用单链表的数据结构来存储消息列表。请看此类中的enqueueMessage()方法:bo原创 2016-10-22 21:22:32 · 5701 阅读 · 0 评论 -
Handler
建议跟随本笔记读源码、读官方文档说明,且牢记消息机制中涉及到的四个部分:Handler、Looper、MessageQueue、Message,分析中会着重强调它们之间的关系)#请仔细阅读官方文档中关于Looper类的说明…..这里截出官方给出的那个实例代码:class LooperThread extends Thread { public Handler mHandler; public原创 2016-10-22 21:21:27 · 474 阅读 · 1 评论 -
关于消息机制四个组成部分的总结性问题
1. Handler和Looper什么时候建立联系:构造方法:<br>1. 首先Handler中持有一个Looper对象的引用2. Looper.myLooper()方法会返回一个Looper对象的应用3. 将Handler中的Looper对象的引用和Looper.myLooper()方法返回的Looper对象应用等值,即两个引用指向同一个对象 2. Handler和MessageQu原创 2016-10-22 21:23:14 · 952 阅读 · 0 评论 -
越过Android中布局文件中使用onClick属性的坑
最近在使用onClick属性时,发现总是崩溃,没办法,回归本源这个时候就去翻官方文档,希望从中找到答案。先来看看官方文档是怎么描述的吧:Name of the method in this View's context to invoke when the view is clicked. This name must correspond to a public method tha原创 2016-11-03 11:06:21 · 24446 阅读 · 5 评论 -
EventBus使用简单小结和在比喻中理解不同订阅模式
1. 订阅与发布订阅:整个对象的订阅:EventBus.getDefault().register()事件方法的订阅:@subscribe()发布事件:EventBus.getDefault().post()/EventBus.getDefault().postSticky取消订阅:EventBus.getDefault().unregister()2.原创 2016-11-03 17:27:46 · 514 阅读 · 0 评论 -
SlidingMenu运行在5.0以上出现视图遮盖
最近在使用SlidingMenu时,同样的布局代码在4.2的模拟器上运行时显示正常,而在5.0的模拟器上运行却有遮盖,起初我以为是我的布局写的有问题,但是想了很长时间,觉得应该不是布局的问题,就上网搜索答案,毕竟它已经很长时间没有更新了,会不会版本的问题。一搜索,果然,就是它导致的,具体原因网上都有介绍。这里简单记录下解决的方法,实际上只需初始化SlidingMenu的时候加上这样一行代码就行了:i原创 2016-10-16 15:57:48 · 838 阅读 · 0 评论 -
再按一次退出——两种方式实现
方式一:private boolean isExit = false;private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0:原创 2017-02-07 19:37:29 · 1801 阅读 · 0 评论 -
自定义EditText的构造器注意点
一般在我们自定义View时,需要提供三个构造器方法(这里的原因是Java基础知识:在子类的构造器中会默认调用父类的无参构造,一旦父类没有提供无参构造,那么子类必须显式调用父类的有参构造)。今天我在继承EditText的时候,出现了一个小问题,特此记录一下,希望其他小伙伴引以为戒,知道的朋友可以趁机嘻嘻我,不要说我不给您们机会。继承EditText时,也不例外,需要提供三个构造方法:和平原创 2017-06-30 14:39:28 · 599 阅读 · 0 评论 -
深入理解final在Java和Android中修饰局部变量的意义
在Android的日常编程中,我们会经常使用匿名内部类,比如给Button设置点击事件时,setOnClickListener(new OnClickListener(){...})。如果此时,我们需要在匿名内部类中外部方法中的局部变量,我们必须手动对将这个局部变量用final关键字修饰(在JDK1.8之后不再需要显示的声明为final,因为这种情况下这个局部变量默认是final的,...原创 2016-11-08 21:40:43 · 5211 阅读 · 8 评论 -
Android Handler机制
1. 四个部分:1) Message:在不同线程之间传递消息,可以在内部携带少量的信息。2) Handler:主要用于发送处理消息的。发送消息:sendMessage()方法,处理消息:handlerMessage()方法3) MesssageQueue:消息队列,主要用于存放所有通过Handler发送的消息。每个线程都只有一个MessageQueue对象。4)原创 2016-04-27 20:02:41 · 321 阅读 · 0 评论