个人学习
xiangkezhu
这个作者很懒,什么都没留下…
展开
-
RxJava 源码分析
首先分析Observable.create操作符例子:Observable observable = Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(@NonNull ObservableEmitter<String>...原创 2020-05-06 13:44:54 · 167 阅读 · 0 评论 -
项目中遇到的关于RecyclerView界面刷新问题
实现RecyclerView带过滤功能遇到的问题复现路径:首先没有过滤出任何元素,界面显示空白,此时很正常,然后清楚过滤关键字,此时应该显示全部数据,但是却显示空白,onBindViewHolder()已经调用。最后发现是由于调用了smoothScrollToPosition方法引起的,但是smoothScrollToPosition却是因为RecyclerView的width设置为wra...原创 2020-04-08 13:38:20 · 1051 阅读 · 0 评论 -
Android studio 编译NDK--使用cmake
以编译LibJpeg为例,方便理解。1.把下载下来的libjpeg库中的所有文件都放在src/main/cpp 文件夹下:2.libjpeg库中已经写好了CMakeLists.text,只需要引用一下就可以了,如果没有则需要自己编写CMakeLists.txt3.编译之后会生成so库和必要的头文件:4.编写C文件,把所需要的头文件放入cpp文件夹下...原创 2020-03-31 16:04:46 · 325 阅读 · 0 评论 -
OKHttp3源码解析
总体流程:okHttpClient = new OkHttpClient.Builder() .addInterceptor(new TokenInterceptor()) .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .build();通过builder模式建造okhttpclie...原创 2019-03-22 11:23:24 · 119 阅读 · 0 评论 -
IntentService
IntentService,可以看做是Service和HandlerThread的结合体,在完成了使命之后会自动停止,适合需要在工作线程处理UI无关任务的场景。IntentService内部使用的是HandlerThread 和Handler,HandlerThread是在Thread的run方法中初始化loop,调用Loop.prepare(),Loop.loop(),线程中有了loop...原创 2019-03-28 10:04:12 · 80 阅读 · 0 评论 -
TCP
TCP采用三次握手确认建立一个连接;位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)第一次握手:客户端发送位码为syn=1...原创 2019-03-28 11:02:03 · 94 阅读 · 0 评论 -
requestLayout 和 invalidate区别
View绘制分三个步骤,顺序是:onMeasure,onLayout,onDraw。调用invalidate方法只会执行onDraw方法;调用requestLayout方法只会执行onMeasure方法和onLayout方法,并不会执行onDraw方法。所以当我们进行View更新时,若仅View的显示内容发生改变且新显示内容不影响View的大小、位置,则只需调用invalidate方法;若Vi...转载 2019-03-28 15:59:11 · 724 阅读 · 0 评论 -
Kotlin ? !! ?:含义
Kotlin中:1. ?代表该值可为空camera?.stopPreview()如果camera为空,则不执行后面的程序;若不为空,则执行后面的程序;2. !!表示该值一定不为空3. ?: 与java三目运算符?:类似,但写法不同java:String name= nameUtils!= null ? nameUtils.getName() : "android"...原创 2019-09-23 15:35:01 · 2021 阅读 · 0 评论 -
【转】Android插件化原理解析——概要
转载:http://weishu.me/2016/01/28/understand-plugin-framework-proxy-hook/随着业务的发展各大厂商都碰到了Android Native平台的瓶颈:从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到65535方法数的天花板;同时,运营为王的时代对于模块热更新提出了更高的要求。 在业务层面上,功能模块的解耦以及维护团...转载 2018-12-29 14:57:34 · 142 阅读 · 1 评论 -
EventBus
三要素:1.event2.subscriber3.publisher四种线程模型:1.POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程2.MAIN 表示事件处理函数的线程在主线程(UI)线程3.BACKGROUND 表示事件处理函数的线程在后台线程4.ASYNC 表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行...原创 2019-01-04 18:03:44 · 197 阅读 · 0 评论 -
热修复之代码修复
热修复主要有三种方案:1.底层替换 2.类加载 3.Instant Run方案1.底层替换方案主要利用反射原理,在反射用到的结构体ArtMethod,替换ArtMethod结构体,使其指向修复好的方法。利用Native反射替换要修复的类的方法的信息(执行入口、访问权限、所属类、代码执行地址等) 即时生效,但由于基于Native层直接替换原有类,限制多,无法增减原有类的方法和字段2...原创 2019-01-10 14:50:42 · 574 阅读 · 0 评论 -
clearCallingIdentity和restoreCallingIdentity
在IPC时,有些情况需要调用clearCallingIdentity和restoreCallingIdentity,原因在于:假如有A进程和B进程,A调用B,B需要知道A的UID和PID,用于权限检测,于是B就保存了A的UID和PID,当此时B调用本身的方法时,binder驱动会检测B调用的是远成进程还是本地进程,如果是本地进程就不会传UID和PID,但此时B保存的仍然是A的UID和PID,所...原创 2019-01-18 10:47:54 · 861 阅读 · 0 评论 -
onSaveInstanceState()和onRestoreInstanceState()
onSaveInstanceState(Bundle outState)在什么时机会被调用? onSaveInstanceState(Bundle outState)会在以下情况被调用: 1、按下HOME键时。 2、从recent中选择运行其他的程序时。 3、按下power键时。 4、一个activity启动一个另一个activity时。 5、屏幕方向切换时。onRestoreI...原创 2019-01-03 15:02:37 · 166 阅读 · 0 评论 -
解决由单例引起的内存泄漏问题
单例对象的生命周期是根据context变化,如果Context使用的是当前Activity或者Fragment中的上下文,则生命周期较短,因此,当生命周期较长的对象引用了“较短”的上下文,会出现这样的情况,当Context所属的Activity或者Fragment 生命周期结束时(可能执行了onDestroy),Java的垃圾回收机制尝试回收该Activity时发现该类还存在引用(单例对象持有了这...原创 2019-01-08 17:29:06 · 742 阅读 · 0 评论 -
线程池的execute() 方法的执行机制
execute() 方法的执行机制工作线程数小于核心线程数时,直接新建核心线程执行任务; 大于核心线程数时,将任务添加进等待队列; 队列满时,创建非核心线程执行任务; 工作线程数大于最大线程数时,拒绝任务...原创 2019-01-09 19:58:01 · 7987 阅读 · 0 评论