9 孙朝阳

尚未进行身份认证

逆水行舟,不进则退!

等级
TA的排名 2w+

Android热修复原理

基本概念热修复是针对apk而言的,所以先来看看apk里都有些什么东西assets:保留工程中的assets目录,这些文件是原始文件,包含其他jar里的assets文件lib:so文件META-INF:签名相关文件resources.arsc:资源文件索引,包含了所有文件的索引,以及他们具体的ID值和类型信息,实际资源还在res里res:工程的资源文件,以主工程为主,其他文件(jar...

2019-12-24 18:18:11

Java线程池

线程池的定义管理一组工作线程,通过线程池复用线程有以下几点优点:1、减少资源创建 =》减少内存开销,创建线程占用内存2、降低系统开销 =》创建线程需要时间,会延迟处理请求3、提高稳定性 =》避免无限创建线程引起的OutOfMemoryErrorExecutors创建线程池的方式ThreadPoolExecutor有四个构造函数,但最终调用的都是同一个: public ThreadPo...

2019-11-29 11:48:11

FFmpeg的使用

FFmpeg库介绍FFmpeg一共包含8个库:1、avcodec:编解码(最重要的库)2、avformat:封装格式处理3、avfilter:滤镜特效处理4、avdevice:各种设备的输入输出5、avutil:工具库(大部分库都需要这个库的支持)6、postproc:后加工7、swresample:音频采样数据格式转换8、swscale:视频像素数据格式转换FFmpeg解码函...

2019-11-25 10:16:10

NDK系列文章(三)JNI基础

Java和C/C++ 中的基本类型的映射关系下表中的数据为JNI基本数据类型及对应的长度d如何配置cmakelist.txt 配置编译动态库和静态库add_library(jinInterface SHARED library.c library.h)// SHARED 表示是动态库add_library(jinInterface STATIC library.c library.h)/...

2019-09-28 00:44:27

NDK系列文章(二)C语言基础

函数及参数传递函数还有很多叫法,比如方法、子例程或程序,等等。内部函数:内部函数又称静态函数。使用内部函数,可以使函数的作用域只局限于所在文件。即使在不同的文件中有同名的内部函数,也互不干扰。提高了程序的可靠性。static int max(int a,int b)外部函数:如果在定义函数时,在函数的首部的最左端加关键字 extern,则此函数是外部函数,可供其它文件调用。C 语...

2019-09-18 10:20:11

NDK系列文章(一)—— NDK概览

JNI 简介名称:Java Native Interface 即Java本地接口作用:使得Java与本地其他类型语言(如C、C++)交互JNI是Java调用Native语言的一种特性,JNI属于Java的,与Android无直接关系Java通过JNI可以调动由C/C++实现的驱动,从而扩展Java虚拟机实现步骤:在java中声明Native方法(即需要调用的本场方法)编译上述J...

2019-09-09 10:40:17

如何卸载Android手机内置应用

1、查看当前打开应用报名adb shell dumpsys window | grep mCurrentFocus2、根据包名卸载应用adb shell pm uninstall [-k] [--user USER_ID] 包名-k 卸载应用且保留数据与缓存,如果不加 -k 则全部删除。--user 指定用户 id,Android 系统支持多个用户,默认...

2019-08-20 09:58:09

搭建IPC通信框架(RPC)

Android进程通讯方式有很多,如Socket、ContentProvider、共享文件(这种方式的缺点是不支持并发写,同时需要手动操作IO)、AIDL、Messenger(底层实现也是AIDL)等。关于AIDL和Messenger的使用详见Android知识点总结(四)进程间通信可以发现Android中IPC方式的使用不是有诸多限制,就是使用起来比较麻烦,所以搭建一套简单易用的IPC框架是很...

2019-07-29 17:57:53

OverScroller的一些重要方法和属性

OverScroll与Scroll类类似,都是实现弹性滑动、惯性滑动的辅助类,只不过OverScroll出现的比较晚,功能更全面一些,可以实现边界回弹等。之所以说它是一个辅助类,是因为它本身并不能移动View,真正移动View的实现需要我们在回调方法computeScroll()中自己实现。基础方法getStartX()和getStartY()getStartX() 滑动的起点x坐标 ,对...

2019-07-02 18:36:07

关于手动添加RecyclerView列表项导致Item里的EditText数据混乱的问题

如果没有手动添加Item这个功能,比较好处理一些,最简单的方法禁止复用holder.setIsRecyclable(false);,但如果有手动添加Item,或者要监听EditText的addTextChangedListener,这时就是禁止复用也没有效果。此时,就得使用绑定tag的方法:第一、为列表实体类添加一个属性uid,作为一个唯一标志,再创建实体类Data的时候,为这个属性设置一个唯...

2019-06-27 15:28:44

实现子view滑动一段距离后,让父view进行滑动

思路分析前期子view需要滑动,所以要获取事件,即此时父view不能拦截事件后期父view需要滑动,此时父view需要进行拦截,获取事件将上面的分析转化为伪代码://子view @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction(...

2019-06-05 12:50:55

sourceinsight安装、查看android源码

下载安装破解版https://pan.baidu.com/s/1-OdZf2gmkUn7_P2loLabXg提取密码:fy3s安装sourceinsight_4.0.86.0-setup.exe用sourceinsight4.exe替换掉安装路径里的同名文件运行出现一下弹框,选择第三个,导入下载包里的si4.pediy.lic文件即可查看android源码打开sourcein...

2019-05-28 10:39:47

Android知识点总结(五)进程间通信之Binder连接池

Android知识点总结(四)进程间通信上一篇文章记录了Messenger及AIDL的使用。其中AIDL的使用是最广泛的,其大致流程:首先创建一个Service和一个AIDL接口接着创建一个类继承自AIDL接口中的Stub类并实现Stub中的抽象方法(也可以直接使用匿名内部类的方式实现),在Service的onBind方法中返回这个类的对象然后客户端就可以绑定服务端Service,建立连...

2019-04-11 14:43:13

Android知识点总结(四)进程间通信

进程间通讯方式Android进程通讯方式有很多,如Socket、ContentProvider、共享文件(这种方式的缺点是不支持并发写,同时需要手动操作IO)、AIDL、Messenger(底层实现也是AIDL)等。使用MessengerMessenger是一种轻量级的IPC方案,可以在不同进程中传递Message对象。不适用与并发服务场景。下面是其常用方法源码 /** *...

2019-04-01 16:35:38

AndroidStudio编译报错org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:proces

AndroidStudio编译报错:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugResources'.finished with non-zero exit value 1Android resource compilation failed Output...

2019-03-20 16:32:45

从零开始手写一个组件化demo

根据上篇Android组件化学习文章,编写一个组件化demo,其结构如下:APP:主moduleLogin:登录组件Pay:支付组件,支付时需要判断是否登录Common:基础组件,包含基础库、公共页面等CommonBase:包含各个组件对外提供访问自身数据的接口、抽象方法等1、使用AS创建一个工程,同时创建Login、Pay、Common、CommonBase四个Libray效...

2019-03-01 18:45:55

Android组件化学习

组件化思想是对模块化的进一步演变,相对与模块化,组件化更加灵活,可以在application与library之间相互转换!无论是组件化还是模块化,都是对大型项目的一种耦合度的解耦,方便团队协作开发!上面是组件化的基本架构图,可以看到组件化一个很明显的特点就是分层!还有一个重点就是通信。架构图从下到上依次为基础层、组件层和应用层!基础层主要包含一些基础库如图片加载框架、网络框架等;组件层就是...

2019-02-21 23:49:32

Java函数式编程四之并行化操作

Java函数式编程三并行和并发并发 和并行是两个不同的概念,它们的作用也不一样。并发是两个任务共享时间段,并行则是两个任务在同一时间发生,比如运行在多核 CPU 上。如果一个程序要运行两个任务,并且只有一个 CPU 给它们分配了不同的时间片,那 么这就是并发,而不是并行。两者之间的区别如图:数据并行化本文主要讨论数据并行化。数据并行化是指将数据分成块,为每块数据分配单独的处理单元。...

2019-01-03 15:31:47

Java函数式编程三之收集器

Java函数式编程二本文主要介绍高级集合类和收集器方法引用Lambda 表达式有一个常见的用法:Lambda 表达式经常调用参数,如:student -> student.getName()java8提供了一个简写语法,叫做方法引用,在这里插入代码片...

2018-12-20 20:00:05

Java函数式编程二之常用流操作

函数式开发旨在帮助程序员写出更好的代码,如Java8新引入的流(Stream)使程序员得以站在更高的抽象层次对集合进行操作!Stream 是用函数式编程方式在集合类上进行复杂操作的工具。传统循环操作有很多弊端如需要写很多样板代码、行为意图不清晰等,嵌套循环更严重,另外传统操作对于并行开发也很麻烦!使用Stream对集合进行操作,可以避免这些。如:计算集合中大于8的元素个数 List&amp

2018-12-20 17:05:39

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。