自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

原创 java的线程池ThreadPoolExecutor原理解析

多线程问题,很多时候都会用到线程池,而ThreadPoolExecutor是java中线程池的重要实现类,理解ThreadPoolExecutor有助于我们更好地理解线程池、甚至去自定义自己的线程池。基本使用初始化线程池Executor executor=new ThreadPoolExecutor(0,Integer.MAX_VALUE,60, TimeUnit.MILLISECOND...

2019-08-29 09:28:22 544 1

原创 android性能优化从入门到精通

什么是性能优化一款app除了要有强大的功能和交互外,在性能上也应该追求更高的要求,这样才能更好的提高用户体验优化目的性能指标优化的方向更快流畅性启动速度页面响应速度响应速度更稳定稳定性避免出现应用崩溃(crash)避免出现应用无响应(ANR)更省资源节省性内存大小安装包大小耗电量网络流量优化详解速度优化内存优化数据结构优化:数据结...

2019-08-16 17:32:14 1560 2

原创 RecyclerView源码分析之四级缓存机制

众所周知,RecyclerView在android中实现列表是性能非常好的,那么性能好的原因在哪里呢?关键还是在它在处理view时的回收和复用。列表在滑动的时候,会进行itemView的回收和复用,那么我们就从滑动回调即onTouchEvent来入手分析。滑动时函数调用链四级缓存机制mChangeScrap与 mAttachedScrap : 显示在屏幕上和不显示在屏幕上的mCache...

2019-06-17 16:00:26 2234 2

原创 android开发模式/框架比较分析:从MVC到MVP到MVVM到Clean

开发模式对比分析MVCMVPMVVMMVPVMCLEAN修改34555新增35455复用34445单元测试34554UI测试44444学习成本34555代码复杂度34555实现复杂度13245代码量13245可读性241...

2019-05-13 14:30:02 4864 5

原创 史上最全android保活方案及比较分析

史上最全android保活方案及比较分析方案对比方案名称方案简述优点缺点适用情况1像素保活在屏幕关闭时打开一个1px的activity,屏幕亮时关闭此activity易于实现锁屏时才能提高优先级,不稳定适用于搭配其他方案一起使用前台服务保活启动一个前台服务,提高应用的优先级系统机制增加冗余服务适用于常用保活广播拉活在接收到特定广播时拉起应...

2019-04-27 14:52:49 3939 4

原创 glide溯源

   最近有时间看了glide的源码,于是想写一下关于glide源码的一些解释和说明,一方面供后来者更好的去阅读glide源码,一方面也为自己的学习做一个记录,本次glide源码分析基于glide4.8.0版本(下载地址),以下是glide溯源的系列文章:   glide溯源之网络请求管理   glide溯源之线程池   glide溯源之Key和缓存文件对应   glide溯源之生...

2018-10-10 11:16:26 1110

原创 Linux信号(signal)机制

signal

2022-08-09 14:30:43 109 1

原创 百度安卓面试题详解

算法题1. 单链表的反转public class DataNode{ public int data; public DataNode next;}public class TestMain{ public DataNode revert(DataNode head){ if(null == head || null == head.next) return head; DataNode pre = head;

2020-07-09 09:43:26 374

原创 java实现二叉树遍历(先序中序后序)

二叉树的遍历,主要有先序中序和后序遍历,三个的递归实现都比较简单,而非递归实现略复杂。先遍历之前,我们先定义一个节点public class TreeNode { private int data; private TreeNode left; private TreeNode right; //get set方法省略}递归实现先序遍历public void preOrd...

2019-10-11 11:20:27 383

原创 jni调用java层静态和非静态函数

jni调用java中的函数大致分为以下三个步骤通过(*env)->FindClass找到类的对象通过(*env)->GetMethodID来获取方法Id通过调用(*env)-<CallVoidMethod来调用对应的函数/方法详细实现步骤首先编写java层静态和非静态方法package clz;public class ClassMethod { pub...

2019-10-10 10:52:51 820

原创 JNI静态注册与动态注册详解

JNI注册,是指将java层方法(native关键字修饰的)和C层方法对应起来,以实现java层代码调用c层代码的目的。JNI注册分为静态注册和动态注册两种,静态注册是通过固定格式方法名进行关联,动态注册是通过动态添加映射关系来进行关联,方法名可以随便起,比较灵活,我们推荐使用动态注册。在进行注册前,需要先下载两个工具Clion和eclipse(能写java application就可以),然后我...

2019-09-29 10:56:28 664

原创 android的ANR原理剖析及图解(基于android9.0)

android中如果在主线程执行耗时操作,那么将会弹出系统弹窗ANR,那么framework层是如何实现超时的判定、都有哪些情况会产生ANR呢?经过分析framework源码发现,有以下四种场景会引起ANRInputDispatching Timeout: 输入事件分发超时5s,包括按键分发事件的超时Service Timeout:服务在20s内未执行完成BroadcastQueue T...

2019-09-19 11:19:40 1033

原创 oppo的android面试准备

android基础service广播哪些场景会出现内存泄漏事件分发机制Activity+Fragment数据库大数据加载自定义Viewhandler源码分析如何分析内存泄漏及如何处理如何分析ANR及如何处理性能优化内存优化你做过没有?一张十万乘以十万的图片,如何加载才不会内存溢出?内存溢出,内存抖动,内存泄漏你都碰到过吗?怎么解决的?如何区分这几种情况?怎么解决由内存...

2019-09-18 10:15:24 1716

原创 腾讯阅文集团android面试记录

一面(电话面试)Android事件分发机制,如何处理冲突webview有哪些问题?listview缓存机制和优化Bitmap图片优化okhttp源码:分发器和五大拦截器线程间通信和进程间通信类加载机制如何做进程保活了解小程序、RN、flutter吗二面(笔试)求下列代码执行后result的值写一个函数,输入两个字符串,输出这两个字符串的字符的交集。例如,当s1=“ma...

2019-09-17 20:16:50 744

原创 阿里android面试准备与题目整理

最近收到了阿里内推的邮件,很快会进行面试,为了准备面试,网上查阅相关阿里历史面试题目,并在这里整理出自己的答案。感谢以下博主提供的资料阿里android实习岗面试面经{Android}参加阿里完面试后:一到HR四面,我的复盘经验总结!阿里巴巴android高级面试经历我在阿里做了5年的Android面试官,那些你必须知道的套路android知识基础Activity的生命周期,...

2019-09-10 10:51:33 1552 1

原创 android适配指南

android适配,是android中非常重要的内容,我们平时做适配时,一般会相对布局、wrap_content、线性比例、单位dp等来做,仅仅做这些其实仅仅算及格,并不能完美适配,比如某个按钮宽高,如果仅仅是写一个dp,那么多数手机可能匹配,但仍然会有部分机型是不能满足要求的,那么我们该如何来做呢?我们先了解一下屏幕适配的基础知识,然后再详情适配方案基础知识像素含义:通常所说的像素,就...

2019-09-06 09:13:46 376 1

原创 Android APK瘦身,看这一篇就够了

随着app的业务复杂度越来越高、资源文件越来越多,我们的app安装包apk文件也就越来越大,而过大的apk文件往往会把用户拒之门外,所以减小apk大小就势在必行了。从APK结构说起...

2019-09-04 09:36:26 657

原创 android性能优化之耗电优化

android性能优化之耗电优化

2019-08-30 17:09:19 537

原创 android性能优化之图片Bitmap优化(含源码)

android性能优化之图片Bitmap优化

2019-08-30 14:17:27 1074

原创 android进程间通信:aidl使用及原理

android中,应用与应用、应用内不同进程之间需要做数据传递时,就需要用到进程间通信,常用的进程间通信有7种,而使用最多的便是aidl,aidl是基于binder来实现的。

2019-08-29 14:44:34 764 1

原创 android性能优化之绘制优化

android绘制优化android绘制优化,主要包括以下几块:布局优化、刷新优化和动画优化布局优化布局优化主要就是避免过度绘制过度绘制布局优化主要就是避免过度绘制什么是过度绘制过度绘制,是指在一帧的时间内(16.67ms)某个像素点被绘制了多次,理论上一个像素点每次只绘制一次是最优的,但是由于重叠的布局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的...

2019-08-23 16:39:13 346

原创 android性能优化之启动优化

android性能优化之冷启动优化冷启动,是指当系统没有当前应用的进程时,启动该应用。冷启动优化,是指在不影响业务的情况下,尽可能去减少冷启动过程中所花的时间。白屏问题白屏问题,是指在冷启动过程中,先出现一个白屏页,然后再出现app的第一个activity,白屏问题是第一个需要优化的点。产生原因白屏问题的产生原因,是因为在app启动过程中,先加载主题背景,然后再加载activity页...

2019-08-23 10:38:57 469

原创 android性能优化之内存优化

android内存问题android内存问题分为内存抖动和内存泄漏。内存抖动是指短时间内有大量对象创建销毁,它伴随频繁的GC。内存泄漏是指程序中已动态分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,长生命周期对象持有短生命周期对象强引用,从而导致短生命周期对象无法被回收。内存问题常常发生在图片处理与显示、动画等场景内存抖动内存抖动会引起以下问题卡顿,内存抖动时会java会...

2019-08-23 09:45:35 368

原创 android的adb常用命令总结

android的adb常用命令总结常用命令adb connect 192.168.5.1 :连接某个IPadb disconnect 192.168.5.1:断开连接adb install <apk_name>:安装apkadb shell pm enable :重新识别应用adb shell input keyevent :模拟某按键点击adb root :获取...

2019-08-22 16:27:29 139

原创 android浏览日志技巧-关键字

android浏览日志技巧-关键字android日志中常用关键字START u0 :framework启动activity[包名]:某个包名对应的信息[RECOVERY] : app重启System.err: at com. : app崩溃Application onCreated: application创建[VIEW_LIFE_CYCLE] :生命周期ANR:发生了ANR...

2019-08-22 16:19:48 787

原创 android事件通信方案对比与LiveDataBus详解

事件通信定义:Activity、fragment、Service、Provider之间进行信息的传递和交换通信方案比较通信方案优点缺点handler系统原生,能实现线程间通信高耦合不利于维护容易导致内存泄漏和空指针broadcast简单性能差传播数据有限打乱代码的执行逻辑interface速度快,容易理解实现复杂,不利于维护rxBus效率...

2019-08-17 15:56:19 1334

原创 SparseArray原理解析

SparseArray原理解析

2019-08-16 16:29:36 392

原创 android数据结构基础

基本介绍ArrayList: 基于数组实现的顺序表,大小可以动态增加,集合元素可以为任意对象类型,基本使用如下//初始化ArrayListArrayList<String> arrayList = new ArrayList<>();//添加元素arrayList.add("list1");arrayList.add("list2");//取出某个位置的元...

2019-08-16 14:57:40 263

原创 android电商组件化设计(含源码):MVP+dagger+组件化

起源在采用组件化之前,我负责的一个电商项目经历了1.0单模块版本、2.0多模块版本,3.0决定采用组件化来重构项目,并将项目开源,可供同样在做电商的android开发者参考、在研究android架构的同行者共同学习进步。在做之前,我们考虑三个问题,what、why和how,什么是组件化?为什么要进行组件化?如何进行组件化?源码地址请点击什么是组件化组件化是指解耦复杂系统时将多个功能模块拆分...

2019-08-12 12:15:04 1067

原创 OkHttp解析从入门到精通-从使用到原理

一、基本概念二、如何使用三、工作流程分析i.分发器ii.拦截器重试拦截器:在交出(交给下一个)之前,负责判断用户是否取消了请求,在获得了结果之后,会根据响应码判断是否需要重定向,如果满足条件那么就会重启执行所有拦截器桥接拦截器:在交出之前,负责将HTTp协议必备的请求头加入其中(如:Host)并添加一些默认的行为(如:GZIP压缩);在获得了结果后,调用保存cookie接口并解析GZ...

2019-08-12 09:11:11 2018

原创 apk安全浅谈

apk安全方案签名混淆加固核心代码从java移到ndk/c++中接口安全处理:验签+https+核心接口加密一、签名如果不对app进行签名,其他人员会利用未签名的包进行再打包,加一些广告信息,从而进行非法牟利,对我们造成影响的损失。签名过程请点击这里二、混淆定义:代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读...

2019-08-01 14:07:23 720

原创 安卓工程师不得不了解的第三方android库

开发架构/模式google-mvpgoogle-mvvmgoogle-cleanMVP+daggerMVVMHabitmosbyMVP网络okhttp: HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽。OkHttp是一个高效的HTTP客户端支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接连接池...

2019-07-31 15:21:22 1037 1

原创 android面试之郑州面试总结

万国商汇java三大特性,对多态的理解封装、继承、多态多态:父类的引用可以指向子类的对象事件分发机制事件传递的顺序:Activity->ViewGroup->ViewdispatchTouchEvent:分发点击事件onInterceptTouchEvent:判断是否拦截了某个事件onTouchEvent:处理点击,view的绘制过程三个阶段...

2019-07-26 09:58:34 1670

原创 android面试之今日头条/字节跳动 android社招面试(附答案)

一面自我介绍注意点:说有亮点的、跳槽原因,从各个点尽力彰显自己优势、技术特长手写代码:计算View树上所有view的数量,参数ViewGroup本质上就是数据结构多叉树递归层序遍历+Android View基本api调用public int getCount(ViewGroup viewGroup){ int count=viewGroup.getChi...

2019-07-26 09:17:50 8043 2

原创 MvpDaggerArch架构使用文档

简要说明MvpDaggerArch是基于google官方推荐的MVP+dagger开发模式、同时集成了retrofit+rxJava2、greenDao、MMKV等,设计的一套可用于中小型项目的完整解决方案,可用于android初学者学习架构、android开发者直接基于此架构进行开发。github地址https://github.com/dingjiaxing/MvpDaggerArch...

2019-07-16 16:09:19 1493

原创 如何阅读android的framework层源码

如何阅读framework层源码我们先提出4个问题来分解“如何阅读framework层源码”这个问题源码从哪里可以看到?阅读源码需要哪些基础?阅读源码需要哪些工具?如何有效地阅读源码?一、源码从哪里可以看到?阅读源码可以通过在线阅读和离线阅读两种方式在线阅读https://www.androidos.net.cn/http://androidxref.com/离线阅读...

2019-06-14 10:29:29 3218 3

原创 ClassLoader类加载源码解析

Java类加载器BootClassLoader: 用于加载Android Framework层class文件。PathClassLoader: 用于Android应用程序类加载器。可以加载指定的dex,jar、zip、zpk中的classes.dexDexClassLoader:加载指定的dex,以及jar、zip、apk中的classes.dex源码解析ClassLoader中...

2019-06-14 08:52:03 1874

原创 多线程、线程池及AsyncTask

基本概念进程和线程进程:资源分配的最小单位线程:独立运行的最小单位并行和并发并行:同时执行,举例子来说,就是高速公路上4辆车可以并排着跑,双核四线程的并行度是4,可以同时运行4个线程并发:单位时间内,能执行的个数,举例来说,单位时间内可以通过的车的数量线程实现方式继承Thread实现Runnable接口实现Callable接口:线程执行结束后有返回值...

2019-06-12 11:27:57 355

原创 android应用程序进程启动过程简析

简述在安卓系统中,当我们点击一个图标后,系统是如何一步步启动app并显示出来页面的呢?接下来我们做一下宏观流程的分析步骤Launcher进程收到用户的点击后,向AMS请求启动根ActivityAMS在判断该app进程不存在后,向Zygote进程请求创建应用程序进程Zygote进程,创建并启动应用程序进程应用程序做一些准备工作后,向AMS请求启动根ActivityAMS启动根Act...

2019-06-05 15:09:33 530

原创 android事件分发机制

基础知识MotionEvent事件简介ACTION_DOWN按下ACTION_MOVE移动ACTION_UP抬起ACTION_CANCEL事件被上层拦截时触发事件分发、拦截与消费类型相关方法ActivityViewGroupView事件分发dispatchTouchEvent☑️☑️☑️事件拦...

2019-06-05 14:01:00 1275 1

glide-source-4.8.0

glide是android中非常优秀的图片加载框架,该文件是glide的4.8.0版本的源码,源码分析文章地址:https://blog.csdn.net/qq_23081779/article/details/82994089

2018-10-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除