![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android进阶
文章平均质量分 71
mingC0758
技术沉淀中..
展开
-
利用OkHttp缓存机制实现无网缓存
OkHttp实现缓存标题字越少,内容含金量越高。OkHttp实现缓存需求描述需求限制思路实现拦截器编写请求拦截器编写响应拦截器添加到OkHttpClient效果图需求描述需求在有网的情况下,正常进行网络请求,然后把响应缓存到本地;在无网的情况下,从本地拿到缓存,返回给调用方。限制不能改变服务器的API,服务器的API没...原创 2018-08-15 03:05:21 · 1197 阅读 · 0 评论 -
OkHttp库源码解析
OkHttp库使用及源码解析OkHttp库使用及源码解析特点使用一个简单的GET请求的步骤(阻塞方式):更好的用法(异步)提交数据的POST请求源码解析OkHttp的线程池对于同步Call和异步Call的处理拦截器HttpStream和StreamAllocationBridgeInterceptorCacheInterceptorConnectInter...原创 2018-08-12 01:34:42 · 432 阅读 · 0 评论 -
Retrofit2源码解析
Retrofit2源码解析Retrofit实际上是一个网络请求框架的封装,它的核心是使用OkHttp来进行网络请求。完成OkHttp数据的转化和适配工作Retrofit使用了动态代理八个步骤创建retrofit实例定义网络请求接口,并添加注解通过 动态代理 生成网络请求对象通过 网络请求适配器 将网络请求对象 进行平台适配通过 网络请求执行器(Call) 发送网络...原创 2018-08-14 00:00:40 · 204 阅读 · 0 评论 -
【转载】Android组件化方案
版权声明:本文为博主原创文章,欢迎大家转载! 转载请标明出处: http://blog.csdn.net/guiying712/article/details/55213884 ,本文出自:【张华洋的博客】Android...转载 2018-08-16 11:02:06 · 266 阅读 · 0 评论 -
【转载】Android 路由框架ARouter最佳实践
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76165252 本文出自【赵彦军的博客】 一:什么是路由?说简单点就是映射页面跳转关系的,当然它也包含跳转相关的一切功能。二:为什么需要路由Android系统已经给我们提供了api来做页面跳转,比如startAc...转载 2018-08-21 02:42:08 · 206 阅读 · 0 评论 -
Android自定义ViewGroup实现侧滑菜单
自定义控件之侧滑菜单SlidingViewGroup本文主要介绍实现一个侧滑菜单的过程。利用ViewGroup来实现,并且具有强扩展性,用户可以自定义主要内容视图和侧滑菜单视图,并妥善处理了父View跟子View的滑动冲突问题。灵感来源与需求灵感主要来自TIM的聊天信息的滑动菜单: 需求: 1. ViewGroup允许用户放入两个视图,一个作为内容视图,一个作为菜单视图。 ...原创 2018-08-24 01:00:36 · 384 阅读 · 1 评论 -
Android Toast机制实现原理
Toast的实现原理通过本文,你将懂得: 1. 为什么调用Toast的子线程需要Looper.prepare() 2. Toast的Window是在哪里创建的Toast中的IPC通信在Toast的实现中主要有两类IPC通信: 1. 从Toast通过IPC访问NotificationManagerService(以下简称NMS) 2. 从NMS通过IPC访问Toast其中...原创 2018-08-21 21:50:16 · 1347 阅读 · 0 评论 -
Linux epoll机制
阻塞和非阻塞轮询当缓冲区为空的时候我们需要阻塞起来(线程切换消耗资源),或者不断地进行轮询(消耗CPU)。缺点阻塞的缺点是:只能处理一个线程的IO流。非阻塞轮训可以同时处理多个流,我们只要不停的把所有流从头到尾问一遍,又从头开始。这样就可以处理多个流了,但这样的做法显然不好,因为如果所有的流都没有数据,那么只会白白浪费CPU。SELECT O(n)可以避免轮询带来的CPU空转。...原创 2018-10-31 01:29:07 · 259 阅读 · 0 评论 -
KeyEvent事件的传递
KeyEvent事件的传递最近解bug的时候遇到这么一个case,就是用户点击导航栏的返回键时,onBackPress并没有执行,再进一步调试发现onKeyDown也没有执行到。所以下面我会尽可能从代码层面分析KeyEvent事件的传递,而一些涉及WMS,IME的就不去深入分析了。KeyEvent主要包括手机导航键Back、Home、Task,也有可能是连接了外置键盘的键盘键。onBac...原创 2019-01-16 14:59:10 · 2564 阅读 · 0 评论 -
ARouter使用
ARouter使用简介ARouter是阿里巴巴出品的路由框架,最佳实践是作为组件化中,不同组件之间页面跳转的中间件,可以有效解耦跳转方和目标页。配置模块下的build.gradle,比如app/build.gradle:defaultConfig { javaCompileOptions { annotationProcessorOptions {...原创 2019-03-03 21:06:34 · 248 阅读 · 0 评论 -
Objective-C Block原理
Block是将函数及其执行上下文封装起来的对象原创 2019-07-11 15:01:51 · 179 阅读 · 0 评论 -
适配Android 8.0(Oreo)通知栏行为变更
适配Android 8.0(Oreo)通知栏行为变更官方文档:https://developer.android.google.cn/about/versions/oreo/android-8.0行为变更 Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。用户界面将通知渠道称之为通知类别。如果使用Sdk版本在26以上,使用下面的...原创 2018-08-07 02:31:19 · 412 阅读 · 0 评论 -
Android TouchEvent事件分发机制
Android TouchEvent事件分发机制 遥控器等按键设备走的是KeyEvent的分发流程,普通触屏手机走的是TouchEvent分发流程。这里只对TouchEvent分发流程做分析源码分析从Activity的dispatchTouchEvent开始分发 public boolean dispatchTouchEvent(MotionEvent ev)...原创 2018-08-11 01:36:05 · 395 阅读 · 0 评论 -
Android内存泄漏框架LeakCanary源码分析
LeakCanary源码分析LeakCanary是一个内存泄漏检测的框架,默认只会检测Activity的泄漏,如果需要检测其他类,可以使用LeakCanary.install返回的RefWatcher,调用RefWatcher.watch(obj)就可以观测obj对象是否出现泄漏。从install方法开始: public static RefWatcher install(Appli...原创 2018-08-02 00:31:02 · 1293 阅读 · 0 评论 -
Android属性动画(缩放平移),无法改变View的大小
属性动画无法改变View的宽高在View的onDraw()方法里int left = mScrollX + paddingLeft;int right = left + mRight - mLeft - mPaddingRight - paddingLeft;int top = mScrollY + getFadeTop(offsetRequired);int bottom = ...原创 2018-04-22 12:42:17 · 11080 阅读 · 0 评论 -
从setContentView说起,在源码中窥探View的绘制流程
找到setContentView的实现代码当你的活动继承了AppcompatActivity时,setContentView实际上调用的是: @Override public void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView(layoutResID)...原创 2018-04-27 02:15:19 · 323 阅读 · 0 评论 -
Android EditText表情输入的探索
简述自己封装一个EditText(实际上只是在EditText内部添加了一个TextWatcher),监听文本改变,将其中的“[..]”类型的文本替换为表情。先说一下在编写中遇到的一个问题:Drawable drawable = getResources().getDrawable(p1, null);ImageSpan span = new ImageSpan(drawable...原创 2018-04-27 02:19:15 · 878 阅读 · 0 评论 -
Glide使用
依赖导入compile 'com.github.bumptech.glide:glide:3.7.0'Glide和PicassoGlide默认采用RGB_565的bitmap格式,因此加载的图片质量要比Picasso差,内存开销比Picasso小。Picasso会加载全尺寸的图片到内存;而Glide加载的大小与ImageView的大小是一致的。Picasso也可以指定加...原创 2018-04-27 02:26:14 · 366 阅读 · 0 评论 -
Retrofit 2.x图文混传,Servlet后台处理图片上传方法
前端处理客户端采用Retrofit进行图文上传,包括JSON格式的String类型和File类型的图片文件接口定义interface Need { /** * 添加需求记录 * @param writeOff * @return */ @POST("Need/addWriteOff") @Multipart ...原创 2018-05-05 00:34:34 · 1186 阅读 · 1 评论 -
Android应用崩溃处理
未捕获的异常去哪里了?在Thread.java里面有这样一个方法: /** * Set the default handler invoked when a thread abruptly terminates * due to an uncaught exception, and no other handler has been defined ...原创 2018-04-29 12:15:54 · 716 阅读 · 0 评论 -
常用ADB命令和模拟器命令
常用ADB命令和模拟器命令ADB命令 adb devices //显示连接上的设备(自动start-server) adb kill-server adb start-server adb install //安装 adb uninstall app包名 adb -s 设备名称 //当连接多个设备时指定一个设备 adb root //获取root权限 adb kill [pid...原创 2018-07-07 03:30:09 · 2416 阅读 · 2 评论 -
Android Studio下的JNI开发
参考文章: 呕心沥血Android studio使用JNI实例使用流程编写Java文件编译生成class文件编译生成.h文件编写C文件配置NDK配置so库配置local.propertiesndk.dir=D\:\\android-ndk-r14b把ndk目录添加进去build.gradle(Module)defaultConfig {...原创 2018-07-07 04:21:09 · 158 阅读 · 0 评论 -
模版方法模式与实战:编写Android应用崩溃处理工具类
模版方法模式与实战:应用崩溃处理本文主要介绍模版方法模式,以及使用模版方法模式开发一个可扩展的Android应用崩溃处理的工具类。模版方法模式与实战:应用崩溃处理原理和应用实战:应用崩溃处理原理和应用AsyncTaskView的绘制流程 等等。。模版方法模式注重于 - 封装不可变部分,扩展可变部分 - 提取公共部分代码,便于维护比如View...原创 2018-08-05 21:29:21 · 188 阅读 · 0 评论 -
自己编写的一个Activity内存泄漏检测工具
自己编写的一个Activity内存泄漏检测工具看完LeakCanary的源码之后,有点想自己动手写一个内存泄漏的工具了,正所谓自己动手,丰衣足食。真正做起来,其实会出现各种问题,最大的问题就是误判,经常由于GC没有及时把销毁的Activity回收而误判未内存泄漏,即便把检测时间延长也是如此: (这是在两次gc后等待10秒仍然存活的activity,此时仅被虚引用指向)最后的解决办...原创 2018-08-09 22:09:26 · 1159 阅读 · 2 评论 -
理解PendingIntent的作用
理解PendingIntent的作用官方文档:https://developer.android.google.cn/reference/android/app/PendingIntent理解PendingIntent的作用PendingIntent是什么非暴露组件的权限问题实例:让其他应用打开本应用的非暴露组件PendingIntent是什么PendingIn...原创 2018-08-06 02:14:01 · 2928 阅读 · 0 评论 -
Android通过反射设置按钮的事件监听器
最近准备入门学习Android的hook框架,因为涉及到Java反射,于是就用这个例子来复习一下Java反射的应用吧。首先确定我们要实现的效果是btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.mak原创 2017-12-17 15:36:49 · 2640 阅读 · 3 评论