Trilen
厚积薄发
调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步。
https://github.com/chenCoding
展开
-
基于线上问题来源码分析onActivityResult调用时机
只有当Activity 回到前台,在resume之前会先执行onActivityForResult,所以页面要收到回调,一定是页面回到前台,直到onResume。先看onActivityForResult 在哪里执行,如下所示,在Activity的 dispatchActivityResult方法内。dispatchActivityResult 在ActivityThread内的deliverRessults。从线上问题来分析startActivtiiyForResult没有收到回调的原因,导致业务异常!原创 2023-05-25 16:42:52 · 305 阅读 · 0 评论 -
Android studio下NDk开发Cmake配置总结
在Android Studio在2.2版本实现了Ndk开发新的编译工具Cmake,比之前ndk-build方式来得更方便快捷,可以直接运行app时就生成了so并打包到apk中,省去了之前开发ndk时出现的很多麻烦。例如没有代码提示,自动填充,开发起来都是一个个手写,出现错误只能是编译打包阶段提示,还必须先生成so再替换原文件运行。现在通过cmake开发起来得到大大提升,下面介绍这段时间ndk jn...原创 2017-10-18 13:47:52 · 10363 阅读 · 1 评论 -
Android Hook框架总结
Android hook 机制原创 2021-12-21 15:27:15 · 3554 阅读 · 0 评论 -
【抛弃制作.9图片】Android基于png图片代码动态实现.9拉伸效果
Android 实现.9拉伸效果的另径,不用画图也可以,动态生成chunk原创 2022-09-22 10:01:38 · 1254 阅读 · 1 评论 -
Android 应用Apk加载PathClassLoader流程及其双亲委托源码分析
Apk加载流程和时机分析原创 2022-04-14 19:21:01 · 545 阅读 · 0 评论 -
Android Studio下Ndk开发踩过的坑以及解办法决
Android studio在2.2之后是开始兼容ndk的开发,尝鲜用来本地开发,各种坑,不兼容。之前用得好好的,一个升级AS或者NDK版本都会一不小心导致了编译失败,或者成功之后,加载不成功。故随手笔记记录下自己踩过的坑,也方便其他人查询。 Trap One : Caused by: java.lang.UnsatisfiedLinkError: dlopen f...原创 2019-11-09 14:10:28 · 8315 阅读 · 0 评论 -
Android Jni开发细节总结
上篇文章介绍了Android studio下Cmake配置编译开发jni总结,这篇介绍JNi开发的细节。Android Jni开发中比java开发不论是在编译阶段还是运行阶段都有更多的细节点需要注意,稍有不慎就会不断地进入填坑模式,扫码加入日志,不断慢慢调试,下面是个人最近开发中所遇到细节整理如下:1、认识JNI中的JavaVM和JNIEnv对象在标准的java平台下,每一个Proce...原创 2021-01-20 13:48:52 · 523 阅读 · 0 评论 -
Android渲染原理必知必会-ViewRootImpl类核心解析
了解ViewRootImpl是学习Android UI机制的核心:事件分发机制,view绘制原理原创 2022-02-22 22:47:23 · 1875 阅读 · 0 评论 -
Fragment实用细节技巧
fragment.setRetainInstance(true)from layout 和 add fragment区别原创 2020-06-23 14:53:06 · 720 阅读 · 0 评论 -
Android Sdk开发安全措施总结
Android 接入sdk是指某公司作为能力提供方经常以接入Sdk形式来暴露能力供用户使用,这样的能力对公司来说是财富实现的资本,不能被外界窥探或者破解成免费使用,那下面来分析下有哪些危害以及解决方案。裸sdk的危害裸Sdk是指sdk未进行加固,直接简单的通过反编译工具就可以看到其实现,现在混淆不算加固,但很多sdk就仅限于混淆而已,就没有其他安全措施了,这样就很容易暴露如下问题:原创 2017-05-28 19:55:38 · 5841 阅读 · 0 评论 -
IDA动态调试技术及Dump内存
最近研究SO文件调试和dump内存时,为了完整IDA调试起来,前后摸索了3天才成功,里面有很多坑和细节,稍微不注意,就一直排行,需要理解每步骤的作用意义,否则就会觉得教程不对,要详细的教程可能找不到,大部分都是简单介绍,没有提醒细节和易忽视的点动态调试步骤,顺序严格如下事先准备工作 1、要求root手机或者直接用模拟器 否则没有权限启动android_server 2、IDA在6.6以上版原创 2017-11-20 21:22:08 · 8760 阅读 · 0 评论 -
Android源码分析View刷新原理Invalidate()和PostInvalidate()
一般Ui控件使用来简单开发时,并没有注意到系统如何刷新,而当我们自定义View或开发复杂的view时,就需要主动调用Invalidate或者postInvalidate等来通知系统刷新绘制UI,刷新视图。那接下来一个个来剖这两个Api的具体实现。Invalidate()invalidate最后调用到invalidateInternal函数,把view的相对尺寸和相关状态设置传递 void in原创 2017-05-28 12:30:36 · 1502 阅读 · 1 评论 -
《Android彻底组件化方案实践》读后分析
项目发展到一定程度,随着人员的增多,代码越来越臃肿,这时候就必须进行模块化的拆分。在我看来,模块化是一种指导理念,其核心思想就是分而治之、降低耦合。而在Android工程中如何实施,目前有两种途径,也是两大流派,一个是组件化,一个是插件化。原创 2017-08-01 17:28:34 · 2585 阅读 · 0 评论 -
Android 双卡识别Imsi以及副卡发送短信总结
Android5.0系统才开始提供对双卡识别支持,提供SubscriptionManager类来完成对双卡相关设备信息的读取。在5.0之前只能根据机型来适配来获取副卡Imsi,本文重点介绍5.0之后的Api以及适配。原创 2017-06-08 17:41:46 · 7518 阅读 · 0 评论 -
Android多进程Process开发总结-优点与缺陷
Androiod多进程为何使用多进程 什么情况下,我们会去想到使用多进程呢? 就我个人开发实践中就多次使用了Android多进程机制,如项目中的推送业务开发,提出要求如下: - 不能影响主业务的代码稳定运行 - 不能占用主业务的进程内存 - 不受主业务进程生命周期影响,独立存在和运行 要满足这3个需求下,不由就会想到在应用内开辟一个新进程单独给推送业务使用,因为其特点明显:原创 2017-05-27 15:49:44 · 9646 阅读 · 1 评论 -
Android Apk资源加载机制源码分析以及资源动态加载实现系列文章
Android系统中运行Apk时是如何对包内的资源进行加载以及我们开发中设置相关资源后又是如何被加载出来,这个系列我们可以学习系统加载资源的机制原理,然后我们再巧妙的利用学习系统加载技巧来打造我们自己的动态资源加载机制实现。原创 2017-06-21 15:41:17 · 1054 阅读 · 0 评论 -
Android Animation动画原理源码分析
Android 平台提供了三类动画,一类是 Tween 动画-Animation,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果;第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似。最后一种就是3.0之后才出现的属性动画PropertyAnimator ,这个分享的是第一类动画实现原理。原创 2017-06-19 17:14:39 · 2910 阅读 · 0 评论 -
Android性能优化方面概述
个人总结性能优化中需要考虑的方面以及简单总结,毕竟相关内容很多,就不详细展开具体内容,但持续更新中,方便自己或大家查阅1、UI卡顿优化 1)布局优化:减少层级(merge),代码重用(include),延迟初始化(viewstub) 2)绘制优化:频繁刷新,过度绘制,超过16ms 3)内存优化:频繁创建对象导致:内存抖动、内存溢出或泄露导致频繁GC 4)...原创 2018-03-07 12:34:11 · 469 阅读 · 0 评论 -
Java 锁整理
整理下java相关锁的概念,加强理解公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。 对于Java ReentrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。 对于Synchroni...原创 2020-06-23 14:54:30 · 166 阅读 · 0 评论 -
《深入探索Android热修复原理》代码热修复总结
阿里巴巴对热修复技术的发展路线: 1、基于Xposed而来的Dalvik下java method hook技术-Dexposed框架,仅限于Dalvik虚拟机 2、兼容到Art虚拟机的Andfix,同样是基于底层的结构替换方案 3、进而发展就是hotfix,基于Andfix,有所提高,但都没有对资源和so实现修复能力 4、接下来就是这篇主角:17年6月提出的新方案-非入侵时Soph...原创 2017-12-25 11:11:20 · 809 阅读 · 1 评论 -
Android硬件开发系列一指纹识别
Android6.0系统才开始支持指纹识别,不过也有些手机定制rom过早就提供相关api来支持,这里不展开,主要介绍兼容包处理以及api使用细节和总结。原创 2017-04-21 17:40:32 · 3666 阅读 · 1 评论 -
Android UI开发细节Api使用技巧总结
收集平时UI开发中使用到或者学习笔记做个收录,好记性不如烂笔头:持续更新中。。。。1、图片渐变技巧 第一种:叠层退去,逐渐显示底层 第二种:直接组合使用,各取一部分组成一个,利用canvas.clipRect来截取 第三种:叠层慢慢增加并且和底层取个交集:取两层绘制交集,显示上层。 PorterDuffXfermode mode = new Port............原创 2019-11-09 14:07:57 · 2847 阅读 · 1 评论 -
源码分析MessageQueue中IdleHandler和SyncBarrier及UI渲染优化应用
深入理解Handler机制idleHandler及SyncBarrier,来充分利用系统资源原创 2019-11-09 14:09:16 · 218 阅读 · 0 评论 -
源码深度解析Activity生命周期中如何正确获取UI尺寸
一般需求中会出现在Activity启动中需要获取Ui控件相关大小或者在界面绘制完成之后刷新数据,我们都知道在UI绘制完成之后,时机最好,不会阻塞主线程导致卡顿或者UI控件参数获取失败。 也许大家使用过或 知道Handler(MainLooper).Post(Runnable)和View.Post(Runnable)都是把Runnable封装成Message再 push到主线成中looper中Mes...原创 2019-11-09 14:09:30 · 1133 阅读 · 3 评论 -
对外暴露能力的Sdk设计经验总结
Sdk开发设计与Apk开发不同的地方还是有些明显的不同之处,明显的区别是使用对象不一样,Sdk是基于开发者使用的,都是有一定的开发水平,相对于Apk用户而言基本是大众用户,做得好不好不仅仅是运行起来性能、稳定行以及功能,还需要顾忌开发者调用是否方便、嵌入成本、更新维护成本,因为Sdk是作为一个库给对方使用,但又不是开源的,还得注意保护知识产权,个人认为一个不错优秀的sdk开发需要注意如下方面:原创 2017-07-19 17:26:55 · 2727 阅读 · 4 评论 -
Android实现资源动态加载的两种方式
这是Android Apk源加载机制原理分析以及动态加载实现系列文章 的最后一篇。经过前两篇的介绍之后,相关基础都讲的差不多了,现在要实现自己项目中的资源加载框架,这里提供两种方式,区别在于由谁来加载资源。1、利用系统加载资源Apk 2、主动手动实现资源的加载原创 2017-06-25 20:41:49 · 6756 阅读 · 1 评论 -
Res目录下资源如图片文件和xml文件资源如何被加载显示出来
紧接上一篇 Android App启动时Apk资源加载机制源码分析 分析App启动时是如何加载初始化资源之后,接下来分析开发过程中调用显示资源View的Api接口(如设置背景图片)具体是如何把启动时加载好的图片显示出来。上篇讲的启动时候加载资源只是把资源初始化准备好,而这篇是将具体实际显示资源时候,是如何把启动时准备好的res资源加载出来供View显示。原创 2017-06-25 16:21:53 · 1884 阅读 · 0 评论 -
Android App启动时Apk资源加载机制源码分析
在Andorid开发中我们要设置文字或图片显示,都直接通过Api一步调用就完成了,不仅是我们工程下res资源以及系统自带的framwork资源也可以,那这些资源打包成Apk之后是如何被系统加载从而显示出来的呢。原创 2017-06-23 11:27:32 · 6065 阅读 · 0 评论 -
Android 图片着色Tint后向兼容DrawableCompat库实现原理分析并简化封装
前言:之前在Android Ui开发中实现ImageView背景图片点击变色,往往会要求UI设计师提供两种不同颜色的图片分别作为selector的不同选中状态下的背景图,可以想象就是仅仅颜色不一样,就需要一个相同大小的图片,这样不仅仅浪费资源,加大res下图片资源体积,而且还需要重新加载一个新图片而导致增加系统负担。所以如果可以利用一种颜色的图片就可以实现出来多种颜色,对这个图片进行着色,实现不同种原创 2017-06-16 16:16:43 · 1302 阅读 · 0 评论 -
Android5.0通过JobScheduler特殊场景下周期性执行后台任务
JobScheduler是Android5.0 开始引入了一个新系统服务。它将后台任务调度直接交给系统服务(JobSchedulerSevice)管理,并且可以设置许多约束条件,如周期调度,延迟调度,网络连接,电源插入,还有AndroidL引入的空闲模式,在条件符合的情况下,系统服务BindService的方式把应用内Manifest中配置的JobService启动起来。原创 2017-06-09 15:15:56 · 2580 阅读 · 2 评论 -
Android多网络环境(wifi,mobile)下强制在某个网络(mobile)访问服务端以及适配
在wifi和移动数据网络同时开启之下,现在需要wifi开着的情况下,强制通过移动数据网络发送网络请求,以及在机型和低版本适配。原创 2017-06-06 19:52:42 · 20790 阅读 · 11 评论 -
Android中Touch事件分发源头的源码分析及内部类扮演的角色
Android上层实现java代码实现,仅仅实现功能还不能体现实力,还要写出一手看起来优雅的代码,今天总结下java内部类如何可以优雅的实现。外围类的窗口及桥梁我们从实际列子出发,看下Android源码中如何通过作为内部类实现Touch事件完整地传递由fromwork层到WMS到ViewRootImpl通过PhoneWindow联系到Activity再到布局View呢。原创 2017-06-05 22:36:56 · 518 阅读 · 0 评论 -
Android 机型适配问题整理
Androi问题机型适配问题都是老生常谈的话题了,其一出生就注定了成为开发人员心中的疼,随着安卓手机品牌发展众多,一款产品应用发布没有经历过充分的机型适配就上线,接下来的一幕就是开发人员收到了满屏的错误日志发来,这个是某某统计软件搜集到的应用崩溃日志,赶紧适配,开发人员当场就会懵逼。下面就自己这几年应用开发经验遇到过的机型适配问题做个罗列,也欢迎读者提供所遇到的机型适配问题以及解决方案。小...原创 2017-06-03 18:30:20 · 12801 阅读 · 3 评论 -
Android 常驻进程保活自启动方案总结
Android常驻进程就是进程一直存在,即使被系统外者其他软件人为杀死也能够自启,这种需求一般就是用来常驻接受推送消息时,如何保证进程不被杀死,实时收到推送的消息,与后台保持着链接。那如何保持进程常驻呢,总结了如下方案:提高进程优先级以及等级Android系统进程管理对进程分等级,当内存不足时按照等级排序从最低等级最先杀死用来回收内存,进程等级排名如下1.前台进程( FOREGROU原创 2017-06-01 22:36:29 · 5312 阅读 · 0 评论 -
Android 自定义键盘输入内容监听
为何要监听输入内容? 一般正常的监听键盘输入内容,都是用Editext控件来实现用户的输入内容显示。但是特殊输入类型,如现在的方格密码输入,必须把内容准确放入方格内,这时候就必须主动操作输入显示这块,而不是全部交给Editext来替代原创 2017-05-18 09:28:50 · 13291 阅读 · 1 评论 -
Android mmap技术实现高性能日志库
1、C/C++实现高性能,Buffer缓存来减少IO次数,Native开发内存占用低,写入内存速度快,不卡顿 2、内存映射mmap实现crash,或进程退出时的未保存的log,避免丢失 数据 3、保存本地,需要的时候日志上传辅助定位 4、密文保存日志,防止数据泄露原创 2018-07-25 19:29:08 · 3035 阅读 · 1 评论 -
Android嵌套滑动-Behavior方案实战及细节注意
笔者在2013年就收到Android嵌套滑动的UI效果需求,当时都是直接从监听滑动事件分发做起,至今再次收到这种类似的需求,一直以来想更新下之前的实现方式,相对于Behavior封装过的方案而言毕竟不够优雅,现就介绍前后两种方案。老方案的思路 这种方式是底层,其他的封装(包括behavoir)都是基于此,直接重写父类(ViewGroup)的事件分发机制:dispatchTouchEvent...原创 2018-06-07 10:59:24 · 5394 阅读 · 1 评论 -
Glide缓存机制
Glide缓存机制Glide缓存非常先进,很灵活,很全面,总体上来讲有内存缓存和磁盘文件缓存。缓冲机制概括来讲就是读缓存以及是写入缓存的机制。而Glide读缓存时机就是先内存缓存查找再到磁盘缓存查找最后网络,写入缓存则就是在获取到原始source图片之后,先写入磁盘缓存,再加入内存缓存。每个缓存查找都是通过key来查询,一般都是直接用下载url来作为key,那Glide的key呢。直接看下原创 2018-01-11 13:25:51 · 9081 阅读 · 0 评论 -
手机dump内存Odex格式反编译
在上篇文中介绍了如何dump内存,生成的文件为odex格式,需要进一步反编译才能查阅。先是通过baksmali工具转成smali格式文件,然后再通过smali工具把smali格式逆向dex。原创 2017-11-27 20:37:05 · 1469 阅读 · 0 评论 -
Sdk界面UI开发自动适配屏幕技巧
前两篇分别是关于Sdk安全方面以及开发注意事项-Sdk迭代开发设计需要考虑的方面总结, 这篇继续讲Sdk开发相关内容-Sdk界面UI开发中图片自适配。在apk开发中我们不会太关注这个图片适配,因为系统会自动适配。这里就是要从图片加载到内存时,具体如何适配的屏幕分辨率先讲起,那还要从图片bitmap加载出来具体大小是多少讲起。原创 2017-09-07 21:57:25 · 1373 阅读 · 0 评论