![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
文章平均质量分 52
droidDing
千里之行,始于足下
展开
-
JNI静态注册与动态注册详解
JNI注册,是指将java层方法(native关键字修饰的)和C层方法对应起来,以实现java层代码调用c层代码的目的。JNI注册分为静态注册和动态注册两种,静态注册是通过固定格式方法名进行关联,动态注册是通过动态添加映射关系来进行关联,方法名可以随便起,比较灵活,我们推荐使用动态注册。在进行注册前,需要先下载两个工具Clion和eclipse(能写java application就可以),然后我...原创 2019-09-29 10:56:28 · 691 阅读 · 0 评论 -
android性能优化从入门到精通
什么是性能优化一款app除了要有强大的功能和交互外,在性能上也应该追求更高的要求,这样才能更好的提高用户体验优化目的性能指标优化的方向更快流畅性启动速度页面响应速度响应速度更稳定稳定性避免出现应用崩溃(crash)避免出现应用无响应(ANR)更省资源节省性内存大小安装包大小耗电量网络流量优化详解速度优化内存优化数据结构优化:数据结...原创 2019-08-16 17:32:14 · 1573 阅读 · 2 评论 -
SparseArray原理解析
SparseArray原理解析原创 2019-08-16 16:29:36 · 394 阅读 · 0 评论 -
android数据结构基础
基本介绍ArrayList: 基于数组实现的顺序表,大小可以动态增加,集合元素可以为任意对象类型,基本使用如下//初始化ArrayListArrayList<String> arrayList = new ArrayList<>();//添加元素arrayList.add("list1");arrayList.add("list2");//取出某个位置的元...原创 2019-08-16 14:57:40 · 269 阅读 · 0 评论 -
android电商组件化设计(含源码):MVP+dagger+组件化
起源在采用组件化之前,我负责的一个电商项目经历了1.0单模块版本、2.0多模块版本,3.0决定采用组件化来重构项目,并将项目开源,可供同样在做电商的android开发者参考、在研究android架构的同行者共同学习进步。在做之前,我们考虑三个问题,what、why和how,什么是组件化?为什么要进行组件化?如何进行组件化?源码地址请点击什么是组件化组件化是指解耦复杂系统时将多个功能模块拆分...原创 2019-08-12 12:15:04 · 1084 阅读 · 0 评论 -
OkHttp解析从入门到精通-从使用到原理
一、基本概念二、如何使用三、工作流程分析i.分发器ii.拦截器重试拦截器:在交出(交给下一个)之前,负责判断用户是否取消了请求,在获得了结果之后,会根据响应码判断是否需要重定向,如果满足条件那么就会重启执行所有拦截器桥接拦截器:在交出之前,负责将HTTp协议必备的请求头加入其中(如:Host)并添加一些默认的行为(如:GZIP压缩);在获得了结果后,调用保存cookie接口并解析GZ...原创 2019-08-12 09:11:11 · 2046 阅读 · 0 评论 -
android性能优化之内存优化
android内存问题android内存问题分为内存抖动和内存泄漏。内存抖动是指短时间内有大量对象创建销毁,它伴随频繁的GC。内存泄漏是指程序中已动态分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,长生命周期对象持有短生命周期对象强引用,从而导致短生命周期对象无法被回收。内存问题常常发生在图片处理与显示、动画等场景内存抖动内存抖动会引起以下问题卡顿,内存抖动时会java会...原创 2019-08-23 09:45:35 · 371 阅读 · 0 评论 -
android性能优化之启动优化
android性能优化之冷启动优化冷启动,是指当系统没有当前应用的进程时,启动该应用。冷启动优化,是指在不影响业务的情况下,尽可能去减少冷启动过程中所花的时间。白屏问题白屏问题,是指在冷启动过程中,先出现一个白屏页,然后再出现app的第一个activity,白屏问题是第一个需要优化的点。产生原因白屏问题的产生原因,是因为在app启动过程中,先加载主题背景,然后再加载activity页...原创 2019-08-23 10:38:57 · 475 阅读 · 0 评论 -
android性能优化之绘制优化
android绘制优化android绘制优化,主要包括以下几块:布局优化、刷新优化和动画优化布局优化布局优化主要就是避免过度绘制过度绘制布局优化主要就是避免过度绘制什么是过度绘制过度绘制,是指在一帧的时间内(16.67ms)某个像素点被绘制了多次,理论上一个像素点每次只绘制一次是最优的,但是由于重叠的布局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的...原创 2019-08-23 16:39:13 · 368 阅读 · 0 评论 -
apk安全浅谈
apk安全方案签名混淆加固核心代码从java移到ndk/c++中接口安全处理:验签+https+核心接口加密一、签名如果不对app进行签名,其他人员会利用未签名的包进行再打包,加一些广告信息,从而进行非法牟利,对我们造成影响的损失。签名过程请点击这里二、混淆定义:代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读...原创 2019-08-01 14:07:23 · 732 阅读 · 0 评论 -
安卓工程师不得不了解的第三方android库
开发架构/模式google-mvpgoogle-mvvmgoogle-cleanMVP+daggerMVVMHabitmosbyMVP网络okhttp: HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽。OkHttp是一个高效的HTTP客户端支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接连接池...原创 2019-07-31 15:21:22 · 1042 阅读 · 1 评论 -
android事件通信方案对比与LiveDataBus详解
事件通信定义:Activity、fragment、Service、Provider之间进行信息的传递和交换通信方案比较通信方案优点缺点handler系统原生,能实现线程间通信高耦合不利于维护容易导致内存泄漏和空指针broadcast简单性能差传播数据有限打乱代码的执行逻辑interface速度快,容易理解实现复杂,不利于维护rxBus效率...原创 2019-08-17 15:56:19 · 1346 阅读 · 0 评论 -
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 · 806 阅读 · 0 评论 -
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 · 146 阅读 · 0 评论 -
android的ANR原理剖析及图解(基于android9.0)
android中如果在主线程执行耗时操作,那么将会弹出系统弹窗ANR,那么framework层是如何实现超时的判定、都有哪些情况会产生ANR呢?经过分析framework源码发现,有以下四种场景会引起ANRInputDispatching Timeout: 输入事件分发超时5s,包括按键分发事件的超时Service Timeout:服务在20s内未执行完成BroadcastQueue T...原创 2019-09-19 11:19:40 · 1045 阅读 · 0 评论 -
oppo的android面试准备
android基础service广播哪些场景会出现内存泄漏事件分发机制Activity+Fragment数据库大数据加载自定义Viewhandler源码分析如何分析内存泄漏及如何处理如何分析ANR及如何处理性能优化内存优化你做过没有?一张十万乘以十万的图片,如何加载才不会内存溢出?内存溢出,内存抖动,内存泄漏你都碰到过吗?怎么解决的?如何区分这几种情况?怎么解决由内存...原创 2019-09-18 10:15:24 · 1724 阅读 · 0 评论 -
腾讯阅文集团android面试记录
一面(电话面试)Android事件分发机制,如何处理冲突webview有哪些问题?listview缓存机制和优化Bitmap图片优化okhttp源码:分发器和五大拦截器线程间通信和进程间通信类加载机制如何做进程保活了解小程序、RN、flutter吗二面(笔试)求下列代码执行后result的值写一个函数,输入两个字符串,输出这两个字符串的字符的交集。例如,当s1=“ma...原创 2019-09-17 20:16:50 · 750 阅读 · 0 评论 -
阿里android面试准备与题目整理
最近收到了阿里内推的邮件,很快会进行面试,为了准备面试,网上查阅相关阿里历史面试题目,并在这里整理出自己的答案。感谢以下博主提供的资料阿里android实习岗面试面经{Android}参加阿里完面试后:一到HR四面,我的复盘经验总结!阿里巴巴android高级面试经历我在阿里做了5年的Android面试官,那些你必须知道的套路android知识基础Activity的生命周期,...原创 2019-09-10 10:51:33 · 1582 阅读 · 1 评论 -
android适配指南
android适配,是android中非常重要的内容,我们平时做适配时,一般会相对布局、wrap_content、线性比例、单位dp等来做,仅仅做这些其实仅仅算及格,并不能完美适配,比如某个按钮宽高,如果仅仅是写一个dp,那么多数手机可能匹配,但仍然会有部分机型是不能满足要求的,那么我们该如何来做呢?我们先了解一下屏幕适配的基础知识,然后再详情适配方案基础知识像素含义:通常所说的像素,就...原创 2019-09-06 09:13:46 · 399 阅读 · 1 评论 -
Android APK瘦身,看这一篇就够了
随着app的业务复杂度越来越高、资源文件越来越多,我们的app安装包apk文件也就越来越大,而过大的apk文件往往会把用户拒之门外,所以减小apk大小就势在必行了。从APK结构说起...原创 2019-09-04 09:36:26 · 665 阅读 · 0 评论 -
android性能优化之耗电优化
android性能优化之耗电优化原创 2019-08-30 17:09:19 · 544 阅读 · 0 评论 -
android性能优化之图片Bitmap优化(含源码)
android性能优化之图片Bitmap优化原创 2019-08-30 14:17:27 · 1086 阅读 · 0 评论 -
android进程间通信:aidl使用及原理
android中,应用与应用、应用内不同进程之间需要做数据传递时,就需要用到进程间通信,常用的进程间通信有7种,而使用最多的便是aidl,aidl是基于binder来实现的。原创 2019-08-29 14:44:34 · 771 阅读 · 1 评论 -
java的线程池ThreadPoolExecutor原理解析
多线程问题,很多时候都会用到线程池,而ThreadPoolExecutor是java中线程池的重要实现类,理解ThreadPoolExecutor有助于我们更好地理解线程池、甚至去自定义自己的线程池。基本使用初始化线程池Executor executor=new ThreadPoolExecutor(0,Integer.MAX_VALUE,60, TimeUnit.MILLISECOND...原创 2019-08-29 09:28:22 · 550 阅读 · 1 评论 -
android面试之郑州面试总结
万国商汇java三大特性,对多态的理解封装、继承、多态多态:父类的引用可以指向子类的对象事件分发机制事件传递的顺序:Activity->ViewGroup->ViewdispatchTouchEvent:分发点击事件onInterceptTouchEvent:判断是否拦截了某个事件onTouchEvent:处理点击,view的绘制过程三个阶段...原创 2019-07-26 09:58:34 · 1731 阅读 · 0 评论 -
android面试之今日头条/字节跳动 android社招面试(附答案)
一面自我介绍注意点:说有亮点的、跳槽原因,从各个点尽力彰显自己优势、技术特长手写代码:计算View树上所有view的数量,参数ViewGroup本质上就是数据结构多叉树递归层序遍历+Android View基本api调用public int getCount(ViewGroup viewGroup){ int count=viewGroup.getChi...原创 2019-07-26 09:17:50 · 8090 阅读 · 2 评论 -
MvpDaggerArch架构使用文档
简要说明MvpDaggerArch是基于google官方推荐的MVP+dagger开发模式、同时集成了retrofit+rxJava2、greenDao、MMKV等,设计的一套可用于中小型项目的完整解决方案,可用于android初学者学习架构、android开发者直接基于此架构进行开发。github地址https://github.com/dingjiaxing/MvpDaggerArch...原创 2019-07-16 16:09:19 · 1496 阅读 · 0 评论 -
glide溯源之网络请求管理
glide溯源系列文章一、相关类简介1. RequestManager:用来管理请求的类;2. Request -> SingleRequest:一个请求,持有一个Engine;3. Engine:负责加载任务,管理活跃、已缓存资源,一个Engine持有一个Jobs,一个Jobs持有多个EnginJob4. EngineJob:加载任务,一个EnginJob持有一个Decode...原创 2018-09-21 09:41:26 · 1863 阅读 · 1 评论 -
glide溯源之Key和缓存文件对应
glide溯源系列文章 看glide源码的时候,对glide关于磁盘缓存文件名、内存缓存文件和资源请求路径的对应关系很好奇,于是来了看看glide是怎么把这个问题处理好的兴趣。glide中定义了抽象接口Key来做各种唯一标识,所有Key的实现类下面有说明,实现方式类似,而Key和磁盘缓存文件名的关系通过SafeKeyGenerator中的getSafeKey方法来关联,本文分...原创 2018-09-20 11:38:54 · 2903 阅读 · 0 评论 -
glide溯源之线程池
glide溯源系列文章一、 相关类1. GlideExecutor二、几个重要的线程池1. 磁盘缓存线程池 //磁盘缓存线程池大小默认是1private static final int DEFAULT_DISK_CACHE_EXECUTOR_THREADS = 1;public static GlideExecutor newDiskCacheExecutor() {...原创 2018-09-19 14:48:21 · 1875 阅读 · 0 评论 -
创建全局WebView报错Didn't find class "android.webkit.RenderProcessGoneDetail"
创建全局WebView时遇到一个报错,WebViewActivity页面会白屏,google后发现是WebView的bug,详细的WebView的bug介绍详见链接(https://groups.google.com/a/chromium.org/forum/#!topic/android-webview-dev/m0EtO3IXNn0),本来是在MainActivity中创建一个全局we...原创 2018-07-07 13:29:33 · 12664 阅读 · 0 评论 -
GVoice错误码8193没声音
集成GVoice的时候发现打开麦克风一直报错8193,没声音,首先两边要同时进入房间才会,至少一方正常打开了麦克风,另外一方打开了扬声器才能出现声音。有两处需要注意的地方,一是结束一定要退出房间,二是要注意以下1、2、3的顺序,并且1、2、3之间要间隔一定的时间间隔,个人猜测操作是异步的,连续调用时可能上一步操作还没完成,调用下一步便会引起报错。1. 要先在首页创建时调用初始化方法 p...原创 2018-07-04 12:26:45 · 901 阅读 · 2 评论 -
android的framework源码重要文件路径
## 相关文件路径1. ActivityManagerService* 用来管理应用程序生命周期并提供常用的导航回退功能。* frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java2. WindowManagerService* 提供一些我们访问手机屏幕的方法。屏幕的透明度、亮度、背景...原创 2018-07-02 00:55:08 · 2072 阅读 · 0 评论 -
github上几个不错的NDK项目
1. 谷歌demo:https://github.com/googlesamples/android-ndk2. 图片裁剪:https://github.com/Yalantis/uCrop3. 图片编辑:https://github.com/siwangqishiq/ImageEditor-Android、https://github.com/wuhaoyu1990/MagicCamera4. ...原创 2018-07-01 18:57:55 · 1141 阅读 · 0 评论 -
android版本兼容问题总结
以下是我在开发过程中遇到的android版本兼容需要注意的几个地方(会继续补充):一、 api 19 4.4以下,不能获取通知的开关状态1. 4.4以上获取状态:```NotificationManagerCompat manager = NotificationManagerCompat.from(MyApplication.getInstance().getContext()); ...原创 2018-07-01 18:55:10 · 1121 阅读 · 0 评论 -
RoundImageView图片不能显示圆角
如果使用了RoundImageView给图片设置了圆角,用了glide之后发现一会是方的一会是圆角的,那么你可能是这么写的Glide.with(MyApplication.getContext()).load(path) .into(mImageView);增加一个asBitmap便可以正常显示圆角了,如下:Glide.with(MyApplication.getContext()...原创 2018-07-01 18:51:42 · 1323 阅读 · 0 评论 -
glide溯源之设计学习
glide溯源系列文章一、学习概览1. 工厂模式2. 面向抽象3. 泛型二、工厂1. HttpUrlConnectionFactory:http请求工厂2. ConnectivityMonitorFactory3. TransitionFactory:动画工厂4. EngineKeyFactory:引擎key工厂5. EngineJobFactory:EnginJob工厂...原创 2018-09-21 14:39:09 · 163 阅读 · 0 评论 -
arouter实现activity跳转原理
一、思路分析arouter让我们可以非常简单地实现组件间页面跳转,实现的基本思路是 1. 在对应的activity上加上注解,通过apt技术来自动生成代码,代码能将 activity对应路径 和 class 添加到路由表中;2. 通过扫描获取所有类,遍历自动执行步骤1中所生成地代码,从而路由表中有了对应地数据,路由表的数据结构为 Map<String,Class<? e...原创 2018-10-16 16:32:11 · 1889 阅读 · 1 评论 -
glide溯源之生命周期管理
glide溯源系列文章 通过查看glide的源码,我们知道glide是通过传入的context的生命周期来管理资源请求的生命周期的,那么glide是如何一步步实现的呢?接下来我们来分析一下。 首先,我们来看一下glide的用法GlideApp .with(context) .load(url) .centerCrop() ....原创 2018-10-10 10:48:22 · 406 阅读 · 0 评论 -
多线程、线程池及AsyncTask
基本概念进程和线程进程:资源分配的最小单位线程:独立运行的最小单位并行和并发并行:同时执行,举例子来说,就是高速公路上4辆车可以并排着跑,双核四线程的并行度是4,可以同时运行4个线程并发:单位时间内,能执行的个数,举例来说,单位时间内可以通过的车的数量线程实现方式继承Thread实现Runnable接口实现Callable接口:线程执行结束后有返回值...原创 2019-06-12 11:27:57 · 359 阅读 · 0 评论