- 博客(92)
- 资源 (3)
- 收藏
- 关注
原创 android AIDL ipc binder转换
众所周知AIDL并不是所有的数据类型都可以传输。可以传输的类型包括:1.原生类型 2.String 3. CharSequence 4. List 5.Map 6. Binder 7. Parcelable容器类 parcelable传输的时候会分解成成员,数组item的方式,传输完成后再进行组装。那Binder类数据是怎么传输的呢?
2024-12-10 00:55:36
534
原创 Android U ART young cc流程分析
众所周知jvm虚拟机为了提高内存回收效率,更高效的进行内存管理与回收,对堆内存进行了分代管理比如hotspot虚拟机的新生代,老年代。根据各代的特征( 新生代对象分配频繁而生存周期短,老年代生存周期长不需要频繁回收)来应用不同的内存回收算法art虚拟机也是如此,不过Android U上年轻代、老年代回收都采用的concurrent_copying回收算法,虚拟机定义了gc_type枚举类来定义不同的回收策略//粘性回收,只回收上次回收后分配的对象。
2024-11-24 18:37:01
1081
原创 binder native内存同步回收
通过扫描gcroot收集待回收的引用到referenceProcessor中的 cleared_references_变量中,其中就包括binder回收逻辑注册到的cleaner对象,最后通过referenceprocessor调用ReferenceQueue类的add方法,添加到回收链表中。当通过binder bp句柄初始化binder proxy的时候会通过注册native 回收函数,来关联java对象与native对象,当java对象被回收的时候会同步回收native对象。
2024-11-11 18:28:50
296
原创 HandleScope 和 LocalReferenceTable 的区别
在 ART(Android Runtime)虚拟机中,HandleScope和LocalReferenceTable都是用于管理 JNI(Java Native Interface)引用的重要机制。1. HandleScope作用:HandleScope是一个基于栈的对象引用管理机制,用于管理局部引用(local references)。它将 Java 对象(jobject)存储在栈上,并自动处理这些引用的生命周期。特点:基于栈:HandleScope是在栈上分配的,因此它的生
2024-11-06 11:02:36
684
原创 art虚拟机中的gcroot
art虚拟机中cc(concurren_copying)算法会把gcroot拷贝到regionspace的tospace类型的region中,2.kRootJNILocal,即通过newlocalRef添加到localRefenceTable中的java obj。kRootThreadObject, //线程对象本身,对应java Thread对象。1.kRootThreadObject 线程对象本身。Thread相关的gcroot。, //java栈帧。
2024-10-17 13:37:16
1066
原创 android linkToDeath内存泄露分析
Register the recipient for a notification if this binder goes away. //注册binder死亡的通知
2023-09-14 11:02:33
1149
原创 android system_server WatchDog简介
android系统中SystemServer WatchDog的主要作用是监控SystemServer进程的运行状态,防止其卡住或者死锁。
2023-09-02 02:49:51
1424
原创 android内存 smaps解析
anon:dalvik-main space (region space)] : 920 kB //堆内存在这里分配,不设置largeSpace的话上限是256M。[anon:dalvik-zygote space] : 3252 kB //zygote进程的初始空间。[anon:libc_malloc] : 31422 kB //通过malloc接口申请的内存,图片内存分配之类的。GL mtrack 是gpu占用的内存。
2023-08-23 21:30:11
2610
原创 应用冷启bindservice耗时
1. 查看binderservice代码发现bindservice如果不传入excutor参数会在主线程回调connection.onserviceconnected()ap主线程调度到了cpu 7超大核进程冷启动 ,但是在init阶段cpu 7一直处于繁忙状态导致没有分配时间片给init,导致sdk初始化慢。背景:sdk初始化的时候耗时过长,而sdk,init方法中只有一个bindservice及一些变量的初始化,却好事100ms。bindservice传递excutor参数,回调在子线程。
2023-08-13 01:40:29
531
转载 Ubuntu 18.04 环境下编译Android 源码
简书地址:www.jianshu.com/p/2beae17c9…android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4模拟器运行1.源码下载首先确保自己已经安装了Git.sudo apt-get install gitgit config –global user.email “test@test.com”git config –global user.n...
2020-03-25 12:24:17
2227
原创 Recyclerview嵌套recyclerview滑动冲突解决(多指方案)
public class QRecyclerView extends RecyclerView { private int mStartX = 0; private int mStartY = 0; private int mTouchSlop = 0; private int mScrollPointerId = -1; public QRecycle...
2019-10-16 14:14:18
3266
转载 java lamda表达式
作者:Mingqi链接:https://www.zhihu.com/question/20125256/answer/324121308来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。答主对Java比较熟悉,就用Java来讲一讲吧。什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给...
2019-08-18 09:55:20
1140
原创 java判断是否是emoji字符(史上最全)
int codePoint = Character.codePointAt(chars, i);//使用charcode而不是直接用char是因为有些字符需要两个char来表示 lowsurragate highsurrgateisEmojiCharacter(codePoint); public static boolean isEmojiCharacter(int codePoint...
2019-07-24 17:39:43
10773
原创 rxjava2.0 线程切换的原理及SubscribeOn,ObserveOn的用法
android开发过程中经常会用到线程切换,比如数据加载、文件存储、数据库操作等都是在io线程处理,而处理结果的展示刷新ui需要在ui线程进行。如果不用rxjava,我们可能会asycTask,或者retrofit自己默认的callback来在ui线程刷新ui。但是当我们的操作变复杂时,比如一个接口的数据依赖于另一个接口的返回,或者一次上传多张图片功能,就会造成接口多层嵌套进而增加维护成本注:...
2019-06-06 16:41:49
1479
原创 五分钟搞懂Android智能指针SP WP
问题不像java这种runtime提供内存回收机制的语言,c c++开发中经常困扰开发者的是变量的分配与回收,当new完对象而忘记delete就会造成内存泄漏,如果delete了还在别处引用当对象,就会形成野指针解决一种内存回收策略叫引用计数,当对象被引用时,引用计数就+1,不再引用的时候引用计数就-1,当引用计数为0时,就回收对象。这种内存回收机制的问题是不能回收循环引用的对象,a对象有b...
2019-05-24 22:00:06
1188
1
原创 git中统计代码行数
查看git上个人代码量git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc
2017-11-16 10:20:14
80520
3
原创 看源码了解Gson excludeStrategy的使用
使用exclude strategy的场景:我们知道Gson 序列化的时候通常有些字段不需要seralize到json中去,gson给我们提供了一个annotaion,Expose 定义: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Exp
2017-11-09 19:07:29
586
原创 heapsort in PriorityQueue
先上图:size = 8Pi = (Ci+1)/2-1CLi = 2Pi+1CRi = CLi+1备注:Pi为父节点index Ci为子节点index CLi为左子节点index CRi为右子节点indexPriorityQueue中的数据结构为:Object[] queue ,是一个
2017-11-09 14:55:30
309
原创 忽略java 运算符的优先级 的一次教训
java运算符号的顺序表,之前没有硬记导致今天遇到了一个诡异的bug 当时是这样写的 :onFail("数据返回为空或格式不正确"+body!=null?body.getStatus():"",null); 并且这个条件很少会走到,结果导致上线几个版本才因为服务器的一次异常导致了crash, 反编译了声称的apk文件,结合上面的运算符的优先级可以如下:if("数据返
2017-10-31 19:10:37
348
原创 android 软件盘设置搜索失效问题处理
同样的问题解决方案很多,但都没有解决我的问题:1:设置xml中设置android:imeOptions="actionSearch"java代码中设置editText.setImeOptions(EditorInfo.IME_ACTION_SEARCH)2:设置 android:inputType="text" 或 android:singleLine="true"
2017-10-09 11:17:19
485
原创 android small资源加载
1:不用small 怎么获取资源 Resouces r = context.getResources(); 获取字符串 r.getString(intValue); 获取图片 r.getDrawable(intValue);2:怎么获取其它package包的资源 方法一: Context otherContext
2017-09-25 18:43:42
648
原创 Android mvc,mvp , mvvm三种设计模式的选择实践
google 官方mvp实践没有一种放之四海皆准的设计模式•追随业务•遵循最基础的原则• 1: 业务逻辑简单,没有可复用模块的直接mvc• 2: 有可服用模块 抽取presenter层• 3: 业务模型,ui框架变动不频繁采用mvp• 4: mvvm
2017-09-15 17:36:16
599
原创 sqlcipher加密已有数据库及其时机
最近我们做的移动im打算将数据库加密,我们的数据库是对数据库的简单封装 ,调研了一些开源数据库加密工具,觉得sqlcipher用户会多一点,而且开源。所以打算就用它了 sqlcipher的使用可以参考下这两篇文章: http://www.jianshu.com/p/3baf311f8c8c https://www.zetetic.net/sqlcipher/sqlcipher-a
2017-08-26 05:45:49
6230
原创 difference between clear data and clear cache ? Android
setting中清除代码1: 清空缓存packageManager 中 packageManagerService -> deleteApplicationCacheFilesAsUser(final UserEnvironment userEnv = new UserEnvironment(curUser);clearDirectory
2017-06-14 11:29:18
697
翻译 api version最佳实践
原文链接: 这是一个好的并且有意思的问题,url设计是restful api最重要的部分,因此,是一种对用户的长期承诺。 随着应用的演化,应用的api应该保持较少的扩展,就像编程语言本身一样。
2017-01-25 18:47:59
972
原创 small插件化方案踩坑
集成方案基本思想:把可变的集成到lib或者app中,不可变的以stub的方式集成 集成方案:保持现有的组件化方案不变,将openali,utils以stub的方式集成到工程中和普通开发之间的区别##缺点:1:service,provider集成到宿主中 2:activity 仅支持launchmode属性,如果有process,configchanged等属性需要在宿主中注册
2017-01-12 19:49:58
1585
转载 Android 镜像使用帮助
注意: 本镜像是 AOSP 镜像,Android SDK因版权原因,我们不能提供镜像服务。参考 Google 教程 https://source.android.com/source/downloading.html, 将 https://android.googlesource.com/ 全部使用 https://aosp.tuna.tsinghua.edu.cn/ 代替即可。由
2016-12-30 11:29:44
1040
原创 Service的初始化流程与small插件化框架
1: bind service时序图2: start service时序图3: small 对service的支持--不支持动态加载,需在宿主中注册 通过反射为ActivityThread的mH变量添加callback唯一的功能是确保如果是启动不同的进程中的service,确保所有的插件已经被加载进来4 : 如何支持
2016-12-18 17:06:00
744
转载 Android打包系列 JAR反编译修改后重新打包
在工作中,有些第三方JAR不能满足我们的特殊需求,所以经常会有需要修改JAR的情况,这里给出基本的修改思路,然后再辅以实例。思路使用反编译工具JD-GUI)打开要修改的jar包(如beforeModify.jar),找到jar包中要修改的class文件(如A.class)打开Eclipse新建一个Java工程,并添加一个类(如A.java:该类名与A.class
2016-12-18 16:17:49
3122
原创 android插件化框架 small对资源的支持
1:不用small 怎么获取资源 Resouces r = context.getResources(); 获取字符串 r.getString(intValue); 获取图片 r.getDrawable(intValue);2:怎么获取其它package包的资源 方法一: Context otherContext
2016-12-02 12:06:39
1033
原创 android插件化 small rules
为什么要用small:1:解决65535的问题,不再依赖multidex,拆分dex变的可控2:small提供了一套插件间的解藕和通信方案,使得独立开发各个模块变得更加容易3:解藕后,各个业务模块可以独立更新4:低入侵性,即使后来改用其他的插件化方案也不需要更改代码结构--切换方案弹性更大 1: bundle.json 用来配置需要被加载的插件{ "u...
2016-11-11 11:02:13
1547
原创 深入理解android UI Thread
理解android UI Thread什么叫做UI Thread我通常的理解是 1. 执行ui绘制的地方,onMeasure onLayout onDraw, 2. android组件activity,service,broadcastreceiver的生命周期都是在ui thread中执行的。如果在ui thread中执行耗时过长的任务,会导致anr但是为什么会这样,并没有深入理解UI
2016-07-05 10:42:23
3039
原创 Andorid Touch 事件情景解析
1: 如果所有的子view都没有消费down事件,事件如何传递 测试代码如下public class ActivityTouchTestActivity extends AppCompatActivity { private static final String Tag = ActivityTouchTestActivity.class.getSimpleName(
2016-06-14 15:48:58
469
原创 android中的token
token顾命思意,象征符号,到底是什么的象征呢?我们在看andorid源码的时候,经常会碰到程序与系统service之间的通信,我们也知道进程间通信会用binder机制!而这个token就是一个IBinder类型代表远程service的stub对象!以下分析以6.0代码为准!1: activity中的mToken activity启动流程中mTo
2016-05-15 22:30:51
4649
原创 nodejs eventEmitter源码解读
1:添加回调emitter.on(event, listener) alias for emitter.addListener(..emitter.addListener(event, listener) {...if (!this._events[type]) // Optimize the ca
2015-12-23 19:59:35
1515
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人