
Android
PdKingLiu
其实我们每个成年人心中都有一个小孩子,有时悲观,有时胆怯,有时羞涩,但又不得不负重前行,给自己勇气和力量...
展开
-
热更新原理总结
文章目录Instant Run概述Gradle TransformInstant Run修复原理ClassLoader 修复代码Instant Run概述Instant Run 是 Android Studio2.0 之后新增的一个运行机制,能够减少开发人员第二次及以后的构建时间。在没有Instant run之前,编译部署应用程序的流程如下图:传统的编译部署,需要重新安装APP和重启 A...原创 2019-11-09 22:04:43 · 2273 阅读 · 0 评论 -
Android个人项目插件化总结——插件apk资源加载
文章目录为什么加载不了资源如何加载资源为什么加载不了资源我们知道获取资源时实际都是使用了Resource。mResource这个变量在Activity父类ContextThemeWrapper中。ContextThemeWrapper的mResource的获得是通过Context的实现类得到的。Context实现类ContextImpl中获得Resources 是通过 Resource...原创 2019-11-09 16:20:05 · 695 阅读 · 0 评论 -
Android个人项目插件化总结——方式二(Hook Instrumentation)
文章目录概述代码补充概述第二种方式思路非常清晰,直接Hook Instrumentation。由activity启动流程知道,startActivity会交给Activity的mInstrumentation.execStartActivity()来处理。最终会调用ActivityThread里面的performLaunchActivity()方法。performLaunchActivit...原创 2019-11-09 12:33:09 · 1199 阅读 · 5 评论 -
Android个人项目插件化总结——方式一(Hook IActivityManager)
文章目录整体流程实现整体流程本篇主要基于Hook代理对象IActivityManager,Activity启动流程不清楚的可以看看我分析Activity流程的文章。public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity ta...原创 2019-11-08 12:10:43 · 993 阅读 · 7 评论 -
Activity启动流程总结
学习插件化首先要清楚Activity启动流程。此篇文章对Activity整体的启动流程做一个总结。SDK版本基于25,项目的插件化适配也只做了API 25的。通常使用startActivity来启动一个Activity@Overridepublic void startActivity(Intent intent) { this.startActivity(intent, null)...原创 2019-11-08 00:39:23 · 637 阅读 · 0 评论 -
关于AIDL和Binder
文章目录BinderAIDL机制使用服务端客户端继承Binder实现继承间通信服务端客户端AIDL是一种跨进程通信的方式,通信基于Binder。直接继承Binder也可以实现跨进程通信。BinderBinder是一个类,它实现了IBinder接口,而IBinder接口定义了与远程对象的交互协议。通常在进行跨进程通信时,不需要实现IBinder接口,直接从Binder派生即可。除了实现IB...原创 2019-11-07 21:56:21 · 845 阅读 · 0 评论 -
Android四大组件之Service、ContentProvider、BroadcastReceiver
文章目录Service生命周期IntentService关于startService和bindServiceAndroidManifest.xml本地Service和远程Service关于bindService的特点Content ProviderBroadcast Receiver分类注册ServiceService 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。生命周期...原创 2019-11-06 15:01:03 · 895 阅读 · 0 评论 -
Android——ANR
文章目录概述场景如何避免概述ANR(Application Not Responding)是指应用无响应。Android系统对于一些事件都在在一定时间内完成,如果超过预订时间没有得到相应就会在成ANR。ANR机制是对应用程序主线程的限制,要求主线程在限定的时间内处理完一些最常见的操作(启动服务、处理广播、处理输入), 如果处理超时,则认为主线程已经失去了响应其他操作的能力。场景导致AN...原创 2019-11-05 11:31:09 · 541 阅读 · 0 评论 -
Android——Fragment生命周期总结
文章目录概述各个生命周期概述Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View。Fragment的生命周期和Activity的生命周期类似,都有一些回调方法。各个生命周期左侧是Activity的生命周期,右侧对应这个状态下执行Fragment的生命周期方法。Fragment有的生命周期与Activity生命周期名字都是一样的,对应的功能也类似。只不...原创 2019-11-01 12:34:37 · 652 阅读 · 0 评论 -
Android——Activity启动模式总结
文章目录概述standardsingleTopsingleTasksingleInstance概述在默认情况下,当我们多次启动同一个Activity 的时候,系统会创建多个实例并把它们一一放入任务栈中, 当我们单击back键,会发现这些Activity会一一回退。我们可能会发现一个问题多次启动同一个Activity,系统会重复创建多个实例。Android在设计的时候不可能不考虑到这个问题,...原创 2019-11-01 11:30:25 · 442 阅读 · 1 评论 -
Android——Activity生命周期总结
文章目录各个生命周期情景分析两个问题异常情况下的周期情况1情况2各个生命周期onCreate——表示Activity正在创建,是生命周期的第一个方法,我们可以在这个方法中做一些初始化工作。onRestart——表示Activity正在重新启动,一般情况下,当当前的Activity从不可见变为可见状态时,onRestart就会被调用。这种行为一般是用户行为所导致的,比如用户点击home键切换...原创 2019-10-31 22:43:55 · 695 阅读 · 0 评论 -
Android 屏幕刷新原理笔记
文章目录概述源码ViewRootImpl 与 DecorView 的绑定ViewRootImpl # scheduleTraversalsChoreographer过滤一帧内重复的刷新请求同步屏障消息postSyncBarrier()刷新控制者 ViewRootImpl总结常见问题概述屏幕刷新包括三个步骤:CPU计算屏幕数据,,把计算好数据交给GPU。GPU会对图形数据进行渲染,渲染好后...原创 2019-10-30 13:25:42 · 943 阅读 · 0 评论 -
WebSocket——OKHttp实现
文章目录WebSocket协议概述OKHttp实现连接握手数据发送数据接收连接保活连接关闭生命周期概括WebSocket协议概述Webscoket是Web浏览器和服务器之间的一种全双工通信协议。比如说,服务器可以在任意时刻发送消息给浏览器。WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接。WebSocket连接由浏览器发起,请求协议是一个标准的HTTP请求,...原创 2019-10-29 21:09:42 · 1683 阅读 · 1 评论 -
OKHttp——拦截器源码分析整理
文章目录getResponseWithInterceptorChain()Interceptor责任链RetryAndFollowUpInterceptorBridgeInterceptorCacheInterceptorConnectInterceptorCallServerInterceptor总结getResponseWithInterceptorChain() Response ge...原创 2019-10-29 15:44:36 · 551 阅读 · 0 评论 -
Android——AsyncTask源码分析整理
文章目录概述源码3.0前的AsyncTask3.0后的AsyncTask小结概述AsyncTask类内部封装了Handler和线程池。可以简化其他线程对UI的操作。AsyncTask是一个抽象类,我们需要创建子类去继承它,并且重组一些方法。参数Params:指定传给任务执行时的参数的类型Progress:指定后台任务执行时将任务进度返回给UI线程的参数类型Result:指...原创 2019-10-28 23:04:50 · 380 阅读 · 0 评论 -
Android——内存泄漏及OOM整理
文章目录内存泄漏静态变量引用Activitystatic间接修饰Activity单例引用Context匿名内部类执行耗时任务非静态内部类Handler引起的内存泄漏资源对象没有关闭OOM内存泄漏静态变量引用Activity静态变量引用Activty对象时,会导致Activty对象所占内存内漏。原因:静态变量是驻扎在JVM的方法区,因此,静态变量引用的对象是不会被GC回收的,因为它们所引用的...原创 2019-10-28 22:02:35 · 479 阅读 · 0 评论 -
ARouter——原理分析整理
文章目录单向依赖的module互不依赖的moduleARouter概述apt & javapoet路由映射文件生成原理定义注解使用注解注解处理器使用javapoet生成java类路由跳转单向依赖的module组件化中两个单向依赖的module之间需要互相启动对方的Activity时,因为没有相互引用,startActivity()是实现不了的,必须需要一个协定的通信方式,此时类似ARo...原创 2019-10-26 23:01:22 · 3364 阅读 · 0 评论 -
Glide——缓存分析整理
文章目录LruCache概述原理DiskLruCache概述Glide缓存概述资源分类缓存设计Glide 缓存源码分析1、生成key2、创建缓存对象LruResourceCache3、获取内存缓存中的图片4、开启加载图片线程5、获取磁盘缓存6、写入磁盘7、写入内存缓存写入弱引用缓存写入LruCacheLruCache概述LruCache是Android 3.1所提供的一个缓存类,所以在And...原创 2019-10-26 17:15:54 · 1846 阅读 · 1 评论 -
LeakCanary原理分析整理
文章目录Reference概述ReferenceReferenceQueueLeakCanary原理检测泄漏的步骤LeakCanary源码第一步——监听第二步——检测泄漏(核心)第三步——泄漏分析Reference概述ReferenceReference主要负责内存的一个状态,Reference类把内存分为四种状态:Active:内存一开始分配的都是ActivePending:快要放进...原创 2019-10-25 21:38:49 · 745 阅读 · 0 评论 -
Android——自定义View
文章目录Android之自定义View继承特定View控件继承View处理padding处理wrap_content属性自定义属性View滑动冲突常见的滑动冲突处理规则Android之自定义View继承特定View控件这种自定义 View 在系统控件的基础上进行拓展,一般是添加新的功能或者修改显示的效果,一般情况下在onDraw()方法中进行处理。我们写一个自定义View,继承自TextV...原创 2019-10-21 18:37:16 · 300 阅读 · 0 评论 -
Android——View的工作流程
文章目录View的工作流程View的工作流程入口DecorView被加载到Window中MeasureSpecView的measure流程View的measure流程ViewGroup的measure流程View的layout流程View的draw流程步骤1:绘制背景步骤3:绘制View的内容步骤4:绘制子View步骤6:绘制装饰View的工作流程View的工作流程,指的就是measure、l...原创 2019-10-20 20:21:24 · 592 阅读 · 0 评论 -
Android——View的事件分发
文章目录View的事件分发机制解析Activity构成源码解析View的事件分发机制概述分发机制View的事件分发机制参考《Android进阶之光》解析Activity构成点击事件用MotionEvent表示。当一个点击事件产生后,事件最先传递个Activity。首先看一下setContentView()方法。调用了getWindow()对应的方法在Activity的at...原创 2019-10-20 17:16:00 · 426 阅读 · 0 评论 -
OkHttp——复用连接池源码剖析总结
文章目录OKHttp的复用连接池1. 主要变量与构造方法2. 缓存操作3. 自动回收连接4. 引用计数5. 小结OKHttp的复用连接池为了解决TCP握手和挥手的效率问题,HTTP有一种叫做keepalive connections的机制,而OKHttp支持5个并发socket连接,默认keepAlive时间为5分钟,接下来看看OKHttp是怎么复用连接的1. 主要变量与构造方法连接池的类...原创 2019-10-02 21:08:10 · 879 阅读 · 0 评论 -
OkHttp——请求流程源码剖析总结
文章目录OkHttp 请求流程1. 请求处理开始基本的用法不赘述了,在官网就能看到。https://github.com/square/okhttpOkHttp 请求流程1. 请求处理开始当原创 2019-10-02 14:58:01 · 453 阅读 · 0 评论 -
RecyclerView——缓存回收机制剖析总结
RecyclerView绘制过程RecyclerView绘制的源码还是比较复杂的,我这里就大概梳理一下主要的流程。RecyclerView.requestLayout开始发生绘制。Layout过程会通过LayoutManager.fill去将RecyclerView填满LayoutManager.fill会调用LayoutManager.layoutChunk去生成一个的ViewHold...原创 2019-09-21 11:39:36 · 966 阅读 · 0 评论 -
ListView——缓存与优化剖析总结
文章目录ListView 缓存机制单类型Item多类型Item缓存剖析ListView优化缓存优化1. 复用convertView2. 缓存Item条目其他优化ListView 缓存机制单类型Item上图B代表View的类型,1/2/3代表在ListView中第几个位置。ListView的缓存池是ListView的父类AbsListView的内部类RecycleBin里面的一个Array...原创 2019-09-19 17:23:07 · 716 阅读 · 0 评论 -
Android——消息机制
参考Android开发艺术探索,基于Android5.0。概述Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。Android消息机制主要指的是Handler的运行机制,Handler底层运行需要MessageQueue和Looper的支撑。MessageQueue :消息队列,它内部存储了一组消息,对外提供插入和删除。内部存储结构是链表...原创 2019-09-17 17:53:16 · 1147 阅读 · 0 评论 -
Android性能优化——电量
文章目录Android性能优化——电量1. 理解电池消耗2. Battery Historian3. 充电状态和BatteryManager4. Wakelock和电池消耗5. 网络和电池消耗6. 使用JobSchedulerAndroid性能优化——电量原Udacity视频链接1. 理解电池消耗手机各个硬件模块的耗电量是不一样的,有些模块非常耗电,而有些模块则相对显得耗电量小很多。电...原创 2019-07-23 22:10:34 · 1098 阅读 · 0 评论 -
Android性能优化——运算
文章目录Android性能优化——运算1. 计算和内存问题2. 缓慢的函数性能3. TraceView4. 批处理(batching)和缓存(caching)5. 阻塞UI线程6. 容器的性能Android性能优化——运算原Udacity视频链接1. 计算和内存问题Android中的Java代码,会需要经过编译优化在执行的过程,代码的不同写法会影响Java编译器的优化效率。不同的for循环...原创 2019-07-23 19:52:13 · 562 阅读 · 0 评论 -
Android性能优化——内存
文章目录Android性能优化——内存1. 内存、GC和性能2. Memory Monitor3. 内存泄漏4. Heap Viewer5. 内存抖动6. Allocation Tracker7. 内存抖动的例子8. RecapAndroid性能优化——内存原Udacity视频链接1. 内存、GC和性能C/C++需要通过手动编码来申请及释放内容,而Java则拥有GC机制。Android ...原创 2019-07-23 11:19:19 · 878 阅读 · 0 评论 -
Android性能优化——渲染
文章目录性能优化之渲染1. 为什么渲染性能很重要2. Defining 'Jank'3. CPU和GPU4. Android UI 和 GPU5. Overdraw6. 修复overdraw7. 关于overdraw的另一件事8. clipRect 和 quickReject9. 练习使用10. 使用Canvas修复11. Layouts, Invalidations and Perf12. Hi...原创 2019-07-22 15:34:26 · 1309 阅读 · 0 评论 -
AndroidStudio3.x 打开Android Device Monitor正确做法
原因就不多说了Android Studio 3.0开始弃用Android Device Monitor刚开始网上搜了一大堆,基本上没用,最后在YouTube上找到解决方案AndroidStudio3.0以上打开Android Device Monitor解决报错 an error has occurred.see the log file 总结如下打开到SDK的目录,进入tools...原创 2019-07-22 11:07:08 · 5605 阅读 · 6 评论 -
Android网络爬虫
我用的是嗅事百科做的例子这里我把网页趴下来,然后用了一个listview展示出来,实现了刷新,加载更多,还有点击事件打开嗅事百科 按 f12 查看源码我对网页了解也不是太多,在网上查了一些资料,然后就开始上手了,对于网址的处理可以使用开源库,我使用了Jsoup首先添加依赖库implementation 'org.jsoup:jsoup:1.11.3'具体的内容请查看Jsoup下面看...原创 2018-09-18 20:20:16 · 4906 阅读 · 0 评论 -
Android多人聊天室—客户端
GitHub地址先上图 主活动接收用户信息并登录package com.example.client;import android.content.Intent;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android....原创 2018-08-16 20:20:27 · 3757 阅读 · 3 评论 -
Android多人聊天室—服务器
GitHub地址先上图主活动连接每个用户package com.example.server;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import and...原创 2018-08-16 19:54:41 · 1982 阅读 · 0 评论 -
Android计算器
效果 UI采用百分比布局,在app\build.gradle的dependencies里面加上implementation 'com.android.support:percent:28.0.0-alpha3'后面对应SDK版本,我的是28.0.0-alpha3 两个TextView用于显示我的APP名称和用户输入的计算式 其他均为按钮<?xml ...原创 2018-07-28 14:10:35 · 996 阅读 · 0 评论