- 博客(81)
- 资源 (10)
- 收藏
- 关注
原创 关于 VS code 复制一行或者一段代码不能换行的问题
习惯了用 IDE 开发,但是目前在转 web 前段,需要用 VS code 开发,把所有的快捷键修改为 IDE快捷键了,但是发现 Ctrl+D 在复制的时候,不能换行,复制当前行必须xuan'zhong
2021-06-11 10:48:21
2510
1
原创 Activity 源码详解之创建
相信大家对于Activity 的生命周期都不陌生吧,但是你真的知道Activity 的生命周期是在什么时候调用的吗?我当时研究的时候,确实走了弯路了,最后发现如何把生命周期和存取数据的方法联系起来解读,会很方便。如果你们想看原文,就去这里找吧。但是我不会像他那样,上去直接抛出ViewManager、WindowManager 和WindowManagerImpl。一、启动Activi...
2019-08-07 16:59:17
3197
原创 setContentView 源码详解
我们每天都在写 onCreate,然后在 onCreate 中绑定布局,方法就是 setContentView,但是你有没有想过为什么要这么写呢?为什么 setContentView 绑定布局之后,Activity 就能显示出对应的界面呢?这正是我们今天要说的。对于有几年工作经验的都知道在 Android 中 有一个叫做 DecorView 的布局,它的父类是 FrameLayout,它里边包...
2019-08-06 14:55:00
453
原创 AsyncTask 源码详解
感谢鸿神大大提供的资料,本想直接转载的,后来发现有些东西弄的不是太清楚,所以就直接自己总结吧,有兴趣的可以自己看下鸿神的 blog,我这里就不讲Executor 这块的知识了,我又没弄懂,讲出来也是直接 copy 过来的,没意思。进入正题,可能现在大多数人还是在使用 Thread + Handler 来处理线程,或者直接线程池处理,其实我也是这样,毕竟理解起来简单,而且代码也容易写(相对于 ...
2019-07-29 16:40:41
247
原创 ListView 源码分析(一)setAdapter 方法实现
对于一个初学者来说,最需要掌握的技能之一是ListView 加载布局,不管是同一种布局还是不同的布局,又或者是加载头文件或者加载底部文件。这些掌握起来不是很难,而对于一个中级的搬砖的来说,这些就太过于肤浅了,如果不懂他的原理,那你就只能在一个叫做万恶的 Adapter 上各种吃亏了。那么请允许我来带你揭开它的神秘面纱,能力一般,水平有限,有不对的请告诉我。ListView 的用法以及为什么...
2019-07-02 09:53:18
1994
原创 Handler 流程源码解析
用了三四年的 Handler,一直就没有真正理解过Handler 到底是个什么东西,从开始认识它,就一直以为记住Handler 是用来发送和处理消息的;Message是消息,Handler 发送和处理的对象;Looper 是用来管理消息队列的;MessageQueue 是消息队列,仅此而已。我曾经天真的以为我记住这些就能用好了,但是当我遇到了一个让我郁闷的一个 BUG,具体错误信息我忘记...
2019-06-03 17:06:29
405
原创 Activity 四大启动模式,一篇文章就够了。
首先感谢https://blog.youkuaiyun.com/mynameishuangshuai/article/details/51491074提供的帮助。话不多说,直接进入正题。啰嗦一句,怎么声明,这个相信只要不是初学者,都是知道的,在Activity 节点下使用 launchMode 属性,进行设置,如下: <activity androi...
2019-05-22 16:33:31
294
原创 Android 系统多媒体(一)- OpenMax 认识
在 Android 结构中,OpenMax IL 通常被当做多媒体引擎插件来使用,Android 最早的多媒体引擎是 OpenCore,后续版本逐渐使用 StageFright 来代替,这两种引擎可以使用 OpenMax 作为插件,主要实现编码/解码(Codec)处理。OpenMax 主要分为三个层次,从上到下分别是 OpenMax DL(OpenMax Development Layer 开...
2019-01-09 16:17:49
1104
原创 Kotlin基础-入门-关键字 const
最近闲着没事,索性研究下路由(ARouter,还有其他的,这这是阿里的路由库)和组件化,顺便再整理组件化项目的时候来玩下 Kotlin,虽然在2016年研究过 Kotlin,但是也挡不住两年没有用过啊,正好闲着,顺便研究下。好了,进入今天的正题,const 这个关键字到底有啥用,用过或者听过 Kotlin 的或多或少的都知道在 Kotlin 中,static 关键字被取消了,已经没有了静态方法...
2018-12-13 14:11:28
527
原创 Android 中的 IPC 方式(六) Binder 连接池和选用合适的 IPC 方法
1. Binder 连接池通过前面几篇文章的介绍,我们知道,不同的 IPC 方式有不同的特点和适用场景。在这篇文章中,我们在介绍下 AIDL,原因是 AIDL 是一种最常用的进程间通信方式,是日常开发中进程间通信的首选,所以我们需要额外强调一下。如何使用 AIDL 我们在前面已经介绍完了,这里在回顾一下它的大致流程,首先创建一个 Service 和一个 AIDL 接口,接着创建一个类继承自...
2018-09-18 16:06:48
260
原创 Android 中的 IPC 方式(五) Socket
Socket 也称为“套接字”,是网络通信中的概念,它分为流式套接字和用户数据报套接字两种,分别对应网络的传输控制层中的 TCP 和 UDP 协议,TCP 协议是面向连接的协议,提供稳定的双向功能,TCP 链接的建立经过“三次握手”才能完成,为了提供稳定的数据传输功能,其本身提供了超时重传机制,因此具有很高的稳定性;而 UDP 是无连接的,提供不稳定的单向连接功能,当然 UDP 也可以实现双向通信...
2018-09-17 16:59:13
571
原创 Android 中的 IPC 方式(四) ContentProvider
ContentProvider 是 Android 中提供的专门用于不同应用间进行数据共享的方式,从这一点来看,它天生就适合进程间通信。和 Messenger 一样,ContentProvider 的底层实现也是 Binder,由此可见,Binder 在 Android 系统中是何等重要。虽然 ContentProvider 的底层是 Binder,但是它的使用过程要比 AIDL 简单的多,这是因...
2018-09-17 13:41:49
293
原创 Android 中的 IPC 方式(三) AIDL
上一篇文章我们介绍了 Messenger 如何来实进程间通信的方法,我们可以发现,Messenger 是以单行的方式处理客户端发来的消息的,如果大量的消息同时发送到服务端,服务端仍然只能一个个处理,如果有大量的并发请求,那么用 Messenger 就不太合适了。同时,Messenger 的作用主要是用来传递消息,很多时候我们可能需要跨进程调用服务端的方法,这个情形用 Messenger 就无法实现...
2018-09-12 17:19:19
281
原创 Android 中的 IPC 方式(二) Messenger
Messenger 可以翻译为信使,顾名思义,通过它可以在不同进程中传递 Message 对象,在 Message 中加入我们需要传递的数据,就可以轻松地实现数据的进程间传递了。Messenger 是一种轻量的 IPC 方案,它的底层实现是 AIDL,下面是 Messenger 的两个构造,从构造方法的实现上我们可以明显看出 AIDL 的痕迹,不管是 Messenger 还是 Stub.asInt...
2018-09-12 15:28:59
213
原创 Android 中的 IPC 方式(一) Bundle 和文件共享
1. Bundle我们知道,四大组件中的三大组件(Activity、Service、BroadcastReceiver)都是支持 Intent 中传递 Bundle 数据的,由于 Bundle 实现了 Parcelable 接口,所以它可以方便的在进程间传输。基于这一点,当我们在一个进程中启动了另一个进程的 Activity、Service 或者 BroadcastReceiver,我肯就可以...
2018-09-11 13:36:31
340
原创 IPC 机制(二)之 IPC 基础概念介绍
在开启本篇文章之前先来说下为什么我们要实现序列化:Android 不同的进程都有自己独立的内存空间,且相互之间不能进行访问。如果像我们平常传一个句柄的方式去传值的话肯定是失败的,因为句柄也是指定内存空间的一个区域。现在进程无法访问目标进程的内存空间,所以句柄传过去也是没有用的。所以我们必须将要传输的数据转换成能够在内存空间流通的形式。这个转化过程就叫做序列化和反序列化。 简单来说是这样的:...
2018-09-07 17:29:58
844
原创 IPC 机制(一)之 Android 中的多进程模式
在正式介绍进程间通信之前,我们必须先要理解 Android 中的多进程模式。通过给四大组件指定 android:process 属性,我们就可以轻松地开启多进程模式,这看起来很简单,但是实际使用过程中却暗藏杀机,1.开启多进程模式正常情况下,在 Android 中多进程是指在一个应用中存在多个进程的情况,因此这里就不讨论两个应用之间的多进程情况了。首先,在 Android 中使用多进程只有...
2018-09-07 10:51:26
404
原创 Android 线程池
提到线程池先说一下线程池的好处,相信读者都有所体会,线程池的优点可以概括为以下三点:(1)重用线程池中的线程,避免因为线程创建和销毁带来的性能开销。(2)能有效控制线程池的最大并发数,避免大量的县城之间互相抢占系统资源而导致的阻塞现象。(3)能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。Android 中的线程池的概念来源于 Java 中的 Executor,...
2018-08-28 11:07:34
233
原创 Android 线程(二) HandlerThread 和 IntentService
HandlerThread HandlerThread 继承了 Thread,它是一种可以使用 Handler 的 Thread,它的实现也很简单,就是在 run() 方法中通过 Looper.prepre() 来创建消息队列,并通过 Looper.loop() 来开启消息循环,这样在实际的使用中就允许通过 HandlerThread 来创建 Handler 了。HandlerThread 的...
2018-08-27 18:01:47
192
原创 Andrroid 线程(一) AsyncTask
主线程和子线程主线程是指进程所拥有的线程,在 Java 中默认情况下一个进程只有一个线程,这个线程就是主线程,主线程主要处理界面交互的相关流程,因为用户随时会和界面发生交互,因此主线程在任何时候都必须有较高的响应速度,否则就会产生一种界面卡顿的感觉。为了保持较高的响应速度,这就要求主线程中不能执行耗时操作,这个时候子线程就派上用场了,子线程也叫工作线程,除了子线程以外的线程都是子线程。An...
2018-08-27 16:57:29
277
原创 Android 的消息机制分析(四)之 Handler 的工作原理
Handler 的工作主要包括消息的发送和就收过程,消息的发送可以通过 post 的一系列方法或者 send 的一系列方法来实现,post 的一系列方法最终是通过 send 的一系列方法来实现的,发送一条信息的典型过程如下所示: public final boolean sendMessage(Message msg) { return sendMessageD...
2018-08-23 15:55:30
299
原创 Android 的消息机制分析(三)之 Lopper 的工作原理
在上篇文章中,我们已经介绍了消息队列里的工作原理,本文将分析 Looper 的具体实现,Looper 在 Android 的消息机制中扮演者消息循环的角色,具体来说它会不停地从 MessageQueue 中查看是否有新信息,如果有新消息就会立即处理,否则一直阻塞在那里。首先看下他的构造方法,在构造方法中会创建一个MessageQueue 即消息队列,然后将当前线程的消息队列保存起来,如下:...
2018-08-23 14:38:40
341
原创 Android 的消息机制分析(二)之消息队列的工作原理
消息队列在 Android 中指的是 MessageQueue,MessageQueue 主要包含两个操作,插入和读取,度去操作本身会伴随着删除操作,插入和读取对应的方法分别为 enqueueMessage 和 next,其中 enqueueMessage 的作用是往消息队列中插入一条信息,而 next 的作用是从队列中取出一条信息并从队列中将其删除。尽管 MessageQueue 叫消息队列,但...
2018-08-23 11:16:31
407
转载 必须要理清的Java线程池
作者:骑小猪看流星链接:https://www.jianshu.com/p/50fffbf21b39本文由作者授权发布。1前言本篇文章主要介绍的是Java(Javaee和Android开发都会涉及)中的线程池。线程池不仅是Java多线程编程的重要基础,而且也是Android面试和Javaee面试中,面试官心血来潮突然向你发难的一道面试题(可能他自己也说不清楚道不明白线程池的概念和应用场景,但他们就...
2018-05-17 13:29:52
978
转载 Android适配刘海屏
前言公司最近要适配华为Pro20,没办法 – 。–一、AndroidP的适配方案上来我最先找到的就是AndroidP,就先以这个入手了。 首先看下谷歌给出的api,大致就分为两种。 1.设置全屏模式WindowManager.LayoutParams lp =getWindow().getAttributes();lp.layoutInDisplayCutoutM...
2018-05-07 13:29:58
952
原创 Android 一键退出
有的时候我们的项目需要用到一键退出的功能,但是网上大多数退出功能都是使用一个集合,然后放在基类里边,分别添加每一个 Activity 到集合里边,然后在取出每个 Activity 进行销毁,代码如下: private List<Activity> activityList = new ArrayList<>(); activityList.add(this);...
2018-05-04 11:33:37
223
原创 View 的工作流程(二)
上篇文章我们已经讲解了 View 的 measure 过程,这篇我们来继续分下下边的内容 View 的 Layout 过程和 Draw 过程1. Layout 过程Layout 的作用是 ViewGrrou 用来确定子元素的位置,当 ViewGrrou 的位置被确定后,它在 onLayout 中会遍历所有子元素并调用其 layout 方法,在 layout 方法中,onLayout 方法又会被调用...
2018-04-26 16:38:59
238
转载 Android 主题切换
今日科技快讯昨天,小米董事长、CEO雷军的母校武汉大学召开新品发布会,正式推出小米6X,该机售价1599元起,将于4月27日上午10点线上线下开卖。小米6X采用时下主流的5.99英寸18:9全面屏设计,全金属机身采用“隐形”天线和底部全对称设计,机身厚度为7.3mm,一共有赤焰红、流沙金、冰川蓝、曜石黑以及樱花粉五种配色。作者简介本篇来自 陈小缘 的投稿,分享了他如何一步一步完成炫酷主题动画的过程...
2018-04-26 09:08:23
215
原创 View 的工作流程(一)
measure 过程要分情况来看,如果只是一个原始的 View,那么通过 measure 方法就完成了测量过程,如果是一个 ViewGroup,除了完成自己的测量以外,还会遍历调用所有子元素的 measure 方法,各个子元素在递归去执行这个流程,下面针对两种情况分别分析。1. View 的 measure 过程View 的 measure 过程有由其 measure 方法来完成,measure ...
2018-04-24 17:21:33
512
原创 理解 MeasureSpec
在开始本篇文章之前,我们先看一段代码: @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expendSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureS...
2018-04-18 18:08:18
2859
4
原创 ViewRoot 和 DecorView 简介
ViewRoot 对应于 ViewRootImpl 类,他是链接WindowManager 和 DecorView 的纽带,View 的三大流程均是通过 ViewRoot 来完成的。在ActivityThread 中,当 Activity 对象呗创建完毕后,会将 DecorView 添加到 Window 中,同时会创建 ViewRootImpl 对象,并将 ViewRootImpl 和 Deco...
2018-04-18 17:42:34
2571
2
原创 事件分发机制(三)—— View 的事件分发机制之源码分析
View 对事件的处理过程要稍微简单一些,注意 View 不包含 ViewGroup,先看下它的 dispatchTouchEvent 方法如下: /** * Pass the touch screen motion event down to the target view, or this * view if it is the target. * ...
2018-03-15 17:55:02
222
原创 事件分发机制(三)—— 顶级 View 的事件分发机制之源码分析
关于点击事件如何在 View 中进行分发,上一篇文章已经做了详细的介绍,这里就不做过多的解释了,下边我们来看顶级 View 是如何进行事件的分发的。首先看 ViewGroup 的点击事件分发过程,其主要实现在 ViewGroup 的 dispatchTouchEvent 方法中。这个方法比较长,我们分段说明。先看下边的代码,很显然,它描述的是当前 View 是否拦截点击事件这个逻辑。 // ...
2018-03-15 16:55:39
185
原创 事件分发机制(二)—— Activity 的事件分发机制之源码分析
1. Activity 对点击事件的分发过程点击事件用 MotionEvent 来表示,当一个点击操作发生时,事件最先传递到当前的 Activity,由Activity 的 dispatchTouchEvent 来进行事件的派发,具体的工作是由 Activity 内部的 Window 来完成的。Window会将事件传递给 decor view,decor view一般就是当前界面的底层容器(即 s...
2018-03-15 14:46:54
708
原创 View事件分发机制(一)
只是做一个总结,其他的下篇文章再讲1. 同一个事件序列是指从手指接触屏幕的一刻开始,到手指离开屏幕的一刻结束,在这个过程中所产生的一系列事件,这个事件序列冲down事件开始,中间有数量不定的move事件,到up事件结束。2. 正常情况下,一个事件序列,只能被一个View拦截且消耗,这一条原因可以参考 3,因为一个元素一旦拦截了某次事件,那么同一个事件序列内的所有事件都会交给这个元素来处理,因此同一...
2018-03-15 11:28:34
223
转载 View的事件分发机制
android事件分发的知识。比如:onTouch和onTouchEvent有什么区别,又该如何使用?为什么给ListView引入了一个滑动菜单的功能,ListView就不能滚动了?为什么图片轮播器里的图片使用Button而不用ImageView?等等……对于这些问题,我并没有给出非常详细的回答,因为我知道如果想要彻底搞明白这些问题,掌握Android事件分发机制是必不可少的,而Android事件
2017-06-01 17:25:17
387
原创 recyclerview封装好的链接
1.自定义上下拉帅新https://github.com/nuptboyzhb/SuperSwipeRefreshLayout 2.x系列的viewhttps://github.com/jianghejie/XRecyclerView3.维护中的viewswipetoloadlayout
2017-05-22 09:30:10
304
原创 仿系统闹钟,实现更新安装之后还可以响铃,开机启动功能需要手机自带开机自启动
忽然飞来一个新的需求,APP的日程安排需要添加一个闹钟提醒,我的天,这是要逆天啊,刚开始做的时候,没想那么多,因为了解的少吗,再加上不知道QQ和微信等已经被厂商加入了白名单,本来想也就是几天的工作量,没想到结果一做就是一星期,感觉脑细胞已经死光,我还能不能知道1+1=3啊在15年使用过一个软件,灵犀语音助手(我不是在打广告,他也不给我钱),他的功能是可以语音定时,告诉他定时时间和需要做的任务,...
2017-04-27 17:21:17
1678
原创 关于rxjava的知识
http://gank.io/post/560e15be2dca930e00da1083http://www.jianshu.com/u/1d5d4cb5f17a
2017-04-13 14:26:27
296
仿淘宝商品属性分类
2016-12-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人