![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 76
AncelyF
这个作者很懒,什么都没留下…
展开
-
Android事件分发机制详解及解决文案:史上最全面、最易懂
点击屏幕Android事件是如何传递,先上图然后再源码解读源码解读当用户触摸屏幕首先由当前Activity来分发public class TouchEventActivity extends AppCompatActivity { private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIn原创 2021-11-02 16:48:25 · 1819 阅读 · 0 评论 -
Retrofit2完全解析和与okhttp之间的关系
刨析Retrofit源码前先简单介绍以下几个和Method相关的方法Method method;//第一: 获取方法上所有的注解Annotation[] methodAnnotations = method.getAnnotations();//第二: 获取方法参数上的所有注解//为什么是二维数组: 因为一个参数会有多个注解, 一个方法可以有多个参数Annotation[][] parameterAnnotationsArray = method.getParameterAnnotations(原创 2021-10-15 00:32:35 · 337 阅读 · 0 评论 -
Android游戏应用内悬浮球(不需要申请权限)
悬浮球踩过的坑公司的SDK要写一个登录界面,里面涉及到悬浮球,但是不能申请权限。起初想到的方案是利用游戏的一个Activity,通过下面代码找到容器viewView root = activity.findViewById(android.R.id.content);然后再把悬浮球View添加进去 View root = activity.findViewById(android.R.id.content); if (root instanceof Fram原创 2020-08-03 19:12:24 · 990 阅读 · 5 评论 -
Android中如何通过keystore生成https证书,并设置证书到我们请求
需要使用keytool命令输入keytool --help 会出现下面帮助类-certreq 生成证书请求-changealias 更改条目的别名-delete 删除条目-exportcert 导出证书-genkeypair 生成密钥对-genseckey 生...原创 2020-04-29 01:23:51 · 998 阅读 · 0 评论 -
详细讲解下Hook技术,以Hook点击事件来示范
Hook技术: Hook就是有一段程序逻辑一直走下去,我们可以捕获到其中间的一些逻辑,加于处理然后再让他接着执行下去;比如Android里面的setOnclickListener这个方法. 正常我们是这样操作的 TextView textView = findViewById(R.id.act_invoke_tv); textView.setOnClick...原创 2020-04-04 22:11:08 · 1271 阅读 · 0 评论 -
JVM内存分配分析
内存管理是JVM的核心内存分配:Jvm在运行过程中会把所管理的内存划分为若干个不同的数据区域(运行时数据区) 线程私有的内存: 程序计数器,本地方法栈,虚拟机栈 程序计数器:指向当前线程正在执行的字节码指令的地址(行号)因为java是多线程,会有线程切换,确保多线程情况下的程序正常执行,记录每个线程执行到哪里 ...原创 2019-12-11 15:53:33 · 180 阅读 · 0 评论 -
Rxjava从使用到原码的解析十三: Rxjava线程切换源码分析(终结版)
先来一段标准代码分析 Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { ...原创 2019-11-22 14:53:08 · 109 阅读 · 0 评论 -
Android中HashMap分析
本文源码基于AndroidSDK 28里的代码分析,其它的也大同小异,由于SDK里的源码不能Debug,这里就自己创建一个MyHashMap来分析基本使用 MyHashMap<String,String> maps = new MyHashMap<>(); maps.put("12","aaa"); maps....原创 2019-11-21 17:03:56 · 533 阅读 · 1 评论 -
Rxjava从使用到原码的解析十: Rxjava实战之配合Retrofit请求完注册接口直接再请求登陆接口
一个注册和登陆接口public interface LoginApi { @FormUrlEncoded @POST("user/login") Observable<HttpResult<LoginBean>> login(@FieldMap Map<String, Object> params); @FormUrl...原创 2019-11-18 16:23:22 · 351 阅读 · 0 评论 -
Rxjava从使用到原码的解析九: Rxjava背压策略
Rxjava背压策略由来:RxJava1.X的时候,还没有背压模式,在我们上游就可以无限发射事件出来,当我们下游处理不过来的时候,就会造成内存泄漏RxJava2.0之后,作者就增加了背压策略-->>Flowable,他拉功能跟Obserable功能基本一样什么时候用Obserable,什么时候用Flowable当上游有大量事件发射的时候,有时会导致下游处理不过来时用Fl...原创 2019-11-18 15:22:00 · 405 阅读 · 0 评论 -
Rxjava从使用到原码的解析八: Rxjava线程切换
来一个最基本的测试在主线程中做如下操作 Log.e(TAG, Thread.currentThread().getName()); Disposable subscribe = Observable.create(new ObservableOnSubscribe<String>() { @Override ...原创 2019-11-17 21:52:43 · 118 阅读 · 0 评论 -
Rxjava从使用到原码的解析七: Rxjava异常型操作符
Rxjava异常型操作符onErrorReturn当发射onError事件的时候,就会拦截这个事件onErrorResumeNext 跟onErrorReturn 差不多,只是onErrorResumeNext 返回的是一个被观察者,可以自己发射事件onExceptionResumeNext可以防止应用异常崩溃retry重试操作符,就是当上游发射了onErro...原创 2019-11-17 20:55:48 · 110 阅读 · 0 评论 -
Rxjava从使用到原码的解析六: Rxjava合并型操作符
Rxjava合并型操作符 : 二个或以上的被观察者进行合并startWithconcatWith跟startWith相反concatmerge合并操作符,跟concat一样,但是他跟concat不同的是他是并列的zipstartWith //Observable(被观察者1).startWith(Observable(被观察者2)) ...原创 2019-11-17 16:54:25 · 116 阅读 · 0 评论 -
Rxjava从使用到原码的解析五: Rxjava过滤型操作符和条件型作符
Rxjava过滤型操作符主要有以下几种filtertakedistinctelementAtfliterDisposable disposable = Observable.just("sanlu", "feihe") .filter(new Predicate<String>() { ...原创 2019-11-17 15:47:16 · 129 阅读 · 0 评论 -
Rxjava从使用到原码的解析四: Rxjava变换型操作符
Rxjava变换型操作符: RxJava从上游发射事件到下游接收事件过程中对进行事件变换.创建变换操作符主要有以下几种map Observable.just(1, 2)//内部会先发送A再发送B .map(new Function<Integer, String>() { @Override...原创 2019-11-17 15:27:27 · 102 阅读 · 0 评论 -
Rxjava从使用到原码的解析三: Rxjava创建型操作符
Rxjava创建型操作符主要有以下几种createjustformArrayemptyrange是用来创建Observable(被观察者)的just操作符的使用 Observable.just("A","B")//内部会先发送A再发送B .subscribe(new Observer<String>()...原创 2019-11-16 22:10:07 · 126 阅读 · 0 评论 -
Rxjava从使用到原码的解析二:Rxjava2的响应式框架设计的事件流向
Rxjava我们可以把他理解成一个河流,事件的起点我们称为上游,事件的终点我们称为下游,河里面的水都是从上而下流动,所以Rxjava也一样,只能从事件的起源再到事件的处理,不可逆状态,我们如果想要改变事件只能在上游和下游之间对事件进行拦截.上游: 被观察者(Observable)下游: 观察者(Observer)示例代码 public void rx01(View view...原创 2019-11-16 21:46:22 · 129 阅读 · 0 评论 -
Rxjava从使用到原码的解析一:Rxjava 的使用和标准观察者模式的写法
Rxjava: 一切满足于起点和终点的这种需求都可以用Rxjava这种事件流来完成.比如我们从服务器拿到一个图片,然后经过很多种处理最终显示在我们手机上.先来 看一下Rxjava的观察者模式Observable:被观察者.一个事件的起点Observer: 观察者,一个事件的终点 public void rx01(View view) { //Rxjava的起点...原创 2019-11-16 21:09:05 · 145 阅读 · 0 评论 -
Rxjava从使用到原码的解析十二: Rxjava转换型操作符map原码解析
上一篇讲了创建型操作符,里面需要传个一个泛型假设为String,那么下游接收的泛型也是Stringmap操作符的作用就是,假设我下游需要接收的是一个Bitmap那这个时候就需要类型来转换.下来来分析下Rxjava是如果做到泛型转换的,先来看来.map的代码 public final <R> Observable<R> map(Function<? ...原创 2019-11-20 11:14:59 · 121 阅读 · 0 评论 -
Rxjava从使用到原码的解析十一: Rxjava创建操作符原码解析
被观察者Observable 实现了ObservableSource接口,泛型为T,从Observable.create方法可以看出,create这个方法一定是一个静态的,代码好下 public static <T> Observable<T> create(ObservableOnSubscribe<T> source) { O...原创 2019-11-20 10:34:36 · 111 阅读 · 0 评论 -
组件化3---组件化路由架构
完整组化件和插件化可以参考我的github项目,已经用在线上项目中先看一下路由架构的设计图上面设置图中可以分析出,一个组名对应的一个ARouter$$Apth$$xxx,,而一个ARouter$$Apth$$xxx下面会有多个跟转路径比如: 我们在一个app模块下组名为app,他对应的唯一path为 ARouter$$Apth$$app,而ARouter$$Apth$$app里面又...原创 2019-11-06 10:49:51 · 180 阅读 · 0 评论 -
组件化2---APT的实现(ARoute)--传统写法和JavaPoet写法
APT技术就是得用注解来自动生成一些类式代码比如下面这个注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.CLASS)public @interface ARouter { String path();//如 /app/MainActivity //可不写,会在path是截取 String gr...原创 2019-11-05 17:55:08 · 335 阅读 · 0 评论 -
组件化1---组件化架构初步原理
完整组化件和插件化可以参考我的github项目,已经用在线上项目中组件化: 就是将一个完整的功能拆分成多个子模块,而每个子模块可以独立编译和运行,也可以任意的组合成一个新的APP优势: 团队开发过程中方便项目管理,它分工非常明确互不干扰,不存在甩锅.组件与组件之间他们不相互依赖却可以相互交互,任意组合,高度解耦.可以分模块打包,分模块测试,可以统一版本的管理(比如buildto...原创 2019-11-05 16:27:10 · 628 阅读 · 0 评论 -
Android事件分发的详解
当用户点击屏幕时,将产生的触摸事件分为以下四种ACTION_DOWN刚刚触摸屏幕ACTION_MOVE 手指在屏幕滑动ACTION_UP:手指离开屏幕ACTION_CANCEL 非人为因素的取消事件分发的对象有Activity:控件的生命周期和处理事件ViewGroup: 一组View的集合View所有UI组件的基类主要涉及到的方法dispahchTouchE...原创 2019-10-31 19:16:46 · 137 阅读 · 0 评论 -
Android屏幕适配的几种方案
开头先了了解一下dp,px,dpi,ppi,缩放因子scaleDensity这里就以荣耀V9为例 物理分辨率为1440*2560,5.7英寸dpi: 这个是系统指定的为640scaleDensity: scaleDensity=dpi/160由于dpi是系统指定所以scaleDensity=640/160=4ppi: 每英寸所包含的像素点个数 逻辑分辨率 = (物理分辨率) /...原创 2019-10-31 11:10:54 · 536 阅读 · 0 评论 -
MVP进行简单粗爆的封装
引用的是OKGOF进行了网络请求,没有把RXjava集成进去。 先给大家看看一共需要几个类,那个MD5可用可不用,自己随便添加的。使用起来也非常的方便: 看下图: 下面看看使用代码:` public class LogoinPresenter extends BasePresenter {private ILoginView currencyView;public static final原创 2017-11-28 16:11:49 · 210 阅读 · 1 评论 -
Android-接口编程--接口的妙用
比如一个网络加载框架,可以使用Okhttp Retrofit Volly 怎么才能实现一分钟实现网络框架的切换首先一个网络请求需要:1 url,params,callback先定义一个万能接口和一个回调public interface IomnipotentHttpIml { void post(String url, Map<String,Object> param...原创 2019-03-19 19:56:22 · 550 阅读 · 0 评论 -
第六天(网络请求之OSI七层模型)
网络交互是一个非常复杂的过程,国际标准把它就分为了七层模型应用层: 可以看的见的终端应用-->比如各种浏览器,有http,rtft等一些信息,上传下载的一些工具表示层: 计算机识别的信息转变成人可以看到的信息(加密解密,压缩解压缩)会话层: 传输端口,接收端口建立会话-->面向连接的,是为传输层服务的传输层: 传输数据的协议与端口-->TC...原创 2019-10-08 14:39:29 · 203 阅读 · 0 评论 -
第四天(内存泄漏以及OOM)
内存泄漏造成的原因:是生命周期长的对象持有生命周期短的对象的引用,造成生命周期短的对象使用完之后无法释放内存;内存泄漏出现的场景1.单例中的static成员间接或直接持有了activity的引用2.非静态内部类持有父类的引用,如非静态handler持有activity的引用3.异步操作如AsyncTask4.资源对象没关闭造成的内存泄漏(如: Cursor、File等)...原创 2019-08-02 13:58:27 · 176 阅读 · 0 评论 -
LayoutInflater.from(this).inflate(int resource,ViewGroup root,boolean attachToRoot)参数的详解
attachToRoot :代表的是解析出来的View是否要添加到root中开始一进来走的是这一行代码public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) { final Resources res = getContext().getRe原创 2018-07-18 15:36:16 · 945 阅读 · 0 评论 -
Retrofit初体验
Retrofit使用步骤1.创建Retrofit对象Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .addC...原创 2018-07-18 15:34:17 · 126 阅读 · 0 评论 -
Okhttp3原码解析(一)
首先看一下Okhttp3是怎么进行请求的//创建OkHttpClient对象OkHttpClient client = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS) .writeTimeout(5, TimeUnit.SECONDS) .connectTimeout(5, TimeUnit....原创 2018-06-28 15:56:26 · 286 阅读 · 0 评论 -
对自定义View的进一步加深
看了某人的攻略,有个蜘蛛网的view,自己也随便写了一个。 思路:1,绘制N个多边行,2,绘制多边行的连线。3,绘制文字,4,绘制每条线上的点。4,绘制全部点的路径颜色。 1.绘制N个多边行,要绘制多边行,多边行是从圆里面画出来的,所以我们先得计算出每个圆的半径。 初始化数据:代码如下 @Override protected void onSizeChanged(int w, int转载 2017-12-06 09:59:57 · 170 阅读 · 0 评论 -
代码实现android的一个登录界面
先让大家看一看效果 是不是感觉没有什么 ,这里面的布局没有用到XML,都是代码写的。为了以后自己还可以用就写一个文章。开始教程了 第一步:创建类public class LoginLayoutView extends RelativeLayout {} 第二步:开始一个view一个view添加 先设置LoginLayoutView 布局参数 LayoutParams layoutP原创 2017-07-28 14:54:31 · 13221 阅读 · 0 评论 -
Android里WebView详解(二)
上一篇讲到了,WebView的一般用法,接下来跟大家讲解下怎么获取html里面的图片,并点击可以放大并左右可以滑动分析 第一 : 新闻里面的图片都可以被点击 第二 : 调到图片详请的时候,传递了一些什么数据 1. 当前点击图片的地址 2. 所有图片的地址 第三 : 当前图片的地址,所有图片的地址,图片点击的实现js做的–>传递java本地代码 步骤 1.动态为图片添加点原创 2016-09-07 19:41:58 · 257 阅读 · 1 评论 -
Android里WebView详解(一)
WebView mWebview;1 : 加载本地的html 1.1 : 将一个本地的网址放到项目的资产目录下(url)mWebview.loadUrl("file:///android_asset/url")//file:///android_asset格式固定写法2 : 加载网络的html文件mWebview.loadUrl("http://blog.csdn.net/qq_35651451/原创 2016-09-07 18:25:17 · 326 阅读 · 0 评论 -
jni开发流程
jni涉及概念 * 交叉编译:一个平台为另一个平台编译代码。不同的操作系统windows Mac OS X linux/unix.不同的处理器架构都算不同平台,x86,arm,mips * 工具链:一套编译的工具,编译过程中顺序调用的一套工具。 * 函数库:实现某一类功能函数的集合,其中的代码已经编译成二进制机器指令。提供库至少需要提供两个文件,.h头文件声明库中的函数,.so/.a库文件包原创 2016-09-03 16:09:12 · 222 阅读 · 0 评论 -
八部教会你们怎么使用ant打包简称天龙八龙
虽然现在ant打包已经不是那么流行,但是为了给初学者一些帮助,还是写一些详细的方法出来 最原始的方法:使用命令行方式 天龙八部开始了 第一部 : 命令行生成R文件 aapt package -f[是否覆盖] -m[打包资源文件目录] -J [R文件目录(gen)] -S [资源文件目录(res)] -I [android环境jar(android.jar)] -M [清单文件(Androi原创 2016-09-03 15:50:48 · 420 阅读 · 0 评论 -
Android中MVP模式的简单实现
MVP是怎么来的 讲到MVP首先跟大家讲讲MVC,记得有一次在面试的,公司的一个技术总监问了我一个问题:安卓是如何体现MVC的.我当初回答也是OK,但那个技术总监也是面试完了给了我一个准确答案,应该这么说,首先把MVC的几个层次说一下, 1: Modle:数据模型和业务逻辑 2: View:XML(布局文件) 3: Controller: Activity,Fragment 其中View层原创 2016-09-03 14:56:36 · 361 阅读 · 1 评论 -
Android内存泄漏相关与Lru概念
一.Java内存泄漏基本知识1.Java内存的分配策略(静态分配,践式分配,堆式分配) 1)静态存储区(方法区):存放静态数据和一些全局变量 2)栈区(方法里的局部变量会在这里创建内存空间,方法结束后会被自动释放) 3)堆区:动态内存分配,通常是我们new对象或者集合数组,不用的时候由GC回收2.Java是如何管理内存的 Java的内存管理其实主是对...原创 2018-07-19 10:31:08 · 173 阅读 · 0 评论