- 博客(17)
- 收藏
- 关注
原创 Android 消息机制
一 概述 Android消息机制主要指Handler的运行机制,主要包括上层的Handler接口以及下层的MessageQueue和Looper。Handler : 消息处理。通常我们需要继承并实现handleMessage方法或者设置一个Callback。 MessageQueue: 消息队列。用于存储消息。 Looper: 消息循环。无限循环从消息队列中查找消息。三者的关...
2019-12-22 19:48:05 321
原创 ThreadLocal源码分析
ThreadLocal是一个线程内部的数据存储类,可以在指定线程存储和读取数据,而数据对于其他线程是不可见的。日常开发中通常会比较少用到ThreadLocal,但是在一些特殊场景可以轻松实现一些比较复杂的需求。我们经常接触到的Android消息机制正是使用了ThreadLocal存储不同线程的Looper对象。基本使用方法我们先看看它的基本使用方法。 private stati...
2019-12-11 14:06:53 232
原创 Android 输入法框架 (2)- 输入法显示和隐藏
通常显示或者隐藏输入法有以下三个场景当一个窗口焦点改变的时候,会根据Window属性控制输入法的显示 App主动调用imm::showSoftInput或者imm::hideSoftinputFromWindow 输入法自己调用ims:requestShowSelf或者ims:requestHideSelfWindow焦点改变当window获得焦点时会调用imm::onPostWin...
2019-03-06 15:40:25 2063 1
原创 Android 插件化分析(4) - 启动一个没有在manifest注册的Activity
Activity必须要在manifest里申明,否则会抛出ActivityNotFoundException。这个是大家再熟悉不多的Android开发规则。但是所谓的插件化就是要在不安装新的apk的情况去修复bug或者增加新的功能,增加一个新的Activity是再正常不过的要求,所以我们就需要利用反射和动态代理去实现这一个要求。之前分析过,要启动一个Activity我们需要把Intent发...
2018-11-22 01:58:31 1538 1
原创 Android 插件化分析(5)- 加载外部dex
Android 插件化能从外部下载apk并加载主要依赖于ClassLoader。ClassLoder是一个抽象类,其中最重要的是BaseDexClassLoader及其子类PathClassLoader和DexClassLoader. public DexClassLoader(String dexPath, String optimizedDirectory, ...
2018-11-22 01:31:27 513
原创 Android 插件化分析(3)- Activity启动流程
在真正分析插件化技术前,我们必须了解一些必要的关于Android四大组件的相关知识。以Activity为例,我们需要了解Activity启动过程,才能有效的进行Hook实现插件化。以Android 8.1为例我们启动一个Activity通常会使用startActivity方法,但是在Activity内部最终都会调用startActivityForResult方法 publi...
2018-11-18 21:52:10 251
原创 Android 插件化分析(2)- 动态代理
代理模式是一个非常常用的设计模式,如果一个类的名称带有Proxy,基本就是使用了代理模式。代理模式为其代理的对象提供了访问的控制。UML图如下public interface IObject { void run();}class ObjectImpl implements IObject { @Override public void run(...
2018-11-18 20:47:36 260
原创 Android 插件化分析(1)- 反射
Java中有一个非常强大的技术:反射。通常我们可以使用反射技术去调用一个类的私有方法或者是访问和修改一个私有属性。 1. 如何获取一个类的类型1.1 直接通过一个类的对象获取它的类型。 String reflect = "reflect"; Class clz = reflect.getClass();1.2 通过类的命名空间和类名去获取类型...
2018-11-18 00:09:56 219
原创 LeakCanary 原理和用法简单总结
LeakCanary是Square公司基于MAT开发的一款监控Android内存泄漏的开源框架。Java基础知识在总结之前需要先了解一些Java的基础知识。1. 强引用通常可以认为是通过new出来的对象,即使内存不足,GC进行垃圾收集的时候也不会主动回收。Object obj = new Object();2. 软引用在内存不足的时候,GC进行垃圾收集的时候会被GC回...
2018-08-05 13:19:57 4092
原创 解决继承SwitchPreference后丢失动画的问题
大概二年前,曾经遇到一个问题,使用SwitchPreference的子类时,Switch的点击动画居然没了,原本点击后SwitchPreference有一个过渡的动画,使用子类就变成了很生硬的直接选中的状态,但是奇怪的是子类没有任何修改!!当时还记得因为这个原因被迫选择了其他的方案。。结果现在在修改一个开源项目的时候又遇到了,于是阅读了SwitchPreference及其父类的源码,居然发现了
2017-05-31 20:34:06 1291
原创 TextInputLayout简单用法:hintText上浮动画以及为EditText设置错误信息
前几天在某个app的注册界面发现当编辑框获得焦点的时候,hintText会自动上浮,当时觉得这app做的还挺好的,居然还设置了动画效果。结果后来百度了一下,发现居然是google提供的support库里自带的。。只能/** * Layout which wraps an {@link android.widget.EditText} (or descendant) to show a flo
2017-05-01 21:12:05 2537
原创 FragmentTabHost用法简介
最近接到新的需求,要求把原本用TabActivity实现词库UI界面重新使用Fragment来实现。不得不吐槽当初开发的人,居然还用TabActivity开发。因为没有滑动切换界面的需求(如果有滑动需求,建议直接用ViewPager实现),为了尽量少的改动代码,所以采用了FragmentTabHost去实现。FragmentTabHost 适用范围 适用范围同TabAct
2017-03-27 22:44:00 445
原创 PopupWindow.showAtLocation理解
最近开发一个新功能的时候遇到了popupWindow显示位置问题,于是好好的研究了下使用方法和源码,发现之前对showAtLocation一直是错误的理解。showAtLocation 是popupWinow的一个public方法,用于在一个特定的问题显示contentView。这个方法一共有4个参数:public void showAtLocation(View parent
2017-03-12 16:56:30 9717 3
原创 判断状态栏是否显示以及获取状态栏高度的方法
前段时间遇到一个问题,需要在一个popupWindow里计算当前状态栏的高度,百度了下相关的方法,要么是直接读取系统里状态栏高度的值,但是无法判断状态栏是否显示,要么就需要在一个activity里通过getWindow获取window对象来判断,有局限性。自己鼓捣了半天,外加百度来的一些信息,想出一个可以同时判断状态栏是否显示以及获取状态栏高度的方法,还不依赖于activity。为了方便自己对
2017-02-28 22:13:40 3835
原创 RecycleView实现左右滑动监听和上下拖拽调换顺序
之前想实现ListView右滑删除和上下拖拽交换位置的功能,但是找来找去,要么就实现上比较复杂,要么就是代码太老了。从github找了几个开源项目,但是总是有这样那样的bug。但是后来得知看到Google居然已经内置了这两个功能,只需要使用v7包里的RecycleView去实现就可以了。代码如下package justwen.demorecycleview;import and
2017-01-08 22:00:35 2824
原创 Android 输入法框架 (1)
以下来自android官网的介绍:Architecture OverviewThere are three primary parties involved in the input method framework (IMF) architecture:The input method manager as expressed by this class is the central ...
2017-01-03 23:25:49 1866
原创 InputMethodFramework学习记录-前言
从毕业到现在已经从事android系统开发已经整整3年了,作为一个非科班出身的码农,时常感到压力很大,总是惶恐自己到底会什么。回想起这3年,除了第一年有兴趣写写PPT,研究下源码,后来只是周期性的处理bug。在工作上得心应手之后更是很少去学习新的东西,看了一些书,可也记不得什么了。所以决定还是在某个地方留下点东西,也算是给自己定下一个目标,去好好研究android framework。...
2016-08-06 23:45:29 478
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人