- 博客(192)
- 资源 (14)
- 收藏
- 关注
转载 自定义view的基本流程
要自定义View首先需要继承View或者其子类,如果需要实现的效果比较复杂,通常需要继承View,有时候我们需要的是系统的控件再加上一些特殊的效果则可以继承View的子类(如TextView)如果是要自己设计一种布局或者要组合其他控件,这时候就需要继承ViewGroup或者LinearLayout、FrameLayout等系统自带的布局首先需要新建res/values/custom_view_attrs.xml,并在里面声明如下然后就可以在xml布局文件中声明了。
2023-04-24 22:14:47
403
原创 Java终止线程
一般任何进行加锁的代码块,都是为了保护数据的一致性,如果在调用 thread.stop() 后导致了该线程所持有的所有锁的突然释放(不可控制),那么被保护数据就有可能呈现不一致性,其他线程在使用这些被破坏的数据时,有可能导致一些很奇怪的应用程序错误。在Thread中提供了一个interrupt()方法,从名字看表示中断,但实际上并不像stop()方法一样直接中断线程,而是向子线程发送一个中断的通知。当使用interrupt()方法时,中断标志就会置true,和使用自定义的标志来控制循环是一样的道理。
2023-04-23 22:58:37
681
原创 插件化之APK动态加载
插件化相关概念:根据组件化与插件化的区别来了解一下概念组件化和插件化的区别组件化:是将一个APP分成多个模块,每个模块都是一个组件(module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件,但是最终发布的时候将这些组件合并成一个统一的APK。插件化:是将整个APP拆分成很多模块,每个模块都是一个APK(组件化的每个模块是一个lib),最终打包的时候将宿主APK和插件APK分开打包,插件APK通过动态下发到宿主APK。插件化的优点减小安装APK的体积,按需下载模块
2023-04-17 15:12:20
1869
原创 android hook(Toast BadTokenException案例)
hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序先捕捉该消息,钩子函数先得到控制权,这时钩子函数即可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来,变成我们自己执行的代码片段。
2023-04-16 15:48:43
433
转载 Android插件化开发指南——类加载器
曾在JVM虚拟机知识点浅析总结中提到过在Java中的类加载器。我们知道Java中类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器。启动类加载器(Bootstrap ClassLoader);主要负责加载 jre\lib\rt.jar 中的JDK文件。扩展类加载器(Extension ClassLoader);
2023-04-10 17:30:11
416
原创 APK瘦身
知道了APK打包流程后想要瘦身,其实无非就是把整个APK的一些文件进行一个瘦身。看下apk的这个文件。包括class、资源,资源生成arsc(资源映射表),manifest清单,再就是meta。对这些文件如果能缩小的话,就能达到缩小apk的目的。
2023-04-09 17:52:36
596
1
原创 APK打包流程
Dex工具会把class文件,还有我们的第三方的这样的依赖库和.class文件,进行编译生成.dex文件,.dex主要是用来在我们的虚拟机运行,当然这个过程也会去消除一些冗余信息、压缩常量值等等做这样的一些简单的处理,相当于简单的优化一下。首先,安卓APP的资源这一块,会通过aapt进行一个编译,这个工具编译的时候,会首先会把我们的这个xml文件生成这一个R.java,然后再就是像manifest清单文件,它会通过编译把生成一个二进制文件,资源文件,他会去生成一个。zipalign(release模式)
2023-04-09 07:29:30
506
原创 Java注解详解
Java注解又称Java标注,是在 JDK5 时引入的新特性,注解(也被称为元数据)。Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。
2023-04-08 17:34:18
1177
原创 Java反射机制详解
是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为 java 语言的反射机制。
2023-04-02 22:11:34
738
原创 Java中的CAS详解
CAS(Compare-And-Swap)是比较并交换的意思,它是一条 CPU 并发原语,用于判断内存中某个值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS机制当中使用了3个值:内存地址V,旧的预期值A,计算后要修改的新值B两个线程同时对内存值V进行操作,V初始值为1线程1、线程2都对V加1计算,预期值A=1,新值B=2线程2先提交,预期值A==V,更新成功,将V更新为2线程1提交时4,发现预期值A=1,V=2,A!=V,提交失败,重新获取内存值V=2。
2023-04-01 20:29:22
968
转载 ConcurrentHashMap
因为 ConcurrentHashMap 是用于多线程的 ,如果ConcurrentHashMap.get(key)得到了 null ,这就无法判断,是映射的value是 null ,还是没有找到对应的key而为 null ,就有了二义性。ConcurrentHashMap 的迭代器创建后,就会按照哈希表结构遍历每个元素,但在遍历过程中,内部元素可能会发生变化,如果变化发生在已遍历过的部分,迭代器就不会反映出来,而如果变化发生在未遍历过的部分,迭代器就会发现并反映出来,这就是弱一致性。
2023-04-01 09:38:34
191
原创 主线程与子线程之间相互通信(HandlerThread)
平时,我们一般都是在子线程中向主线程发送消息(要在主线程更新UI),从而完成请求的处理。那么如果需要主线程来向子线程发送消息,希望子线程来完成什么任务。该怎么做?这就是这篇文章将要讨论的内容。
2023-03-24 14:59:48
3661
原创 Listview 和 Recyclerview 的区别
listview的用法继承BaseAdapter,需要重写四个方法不强制使用viewholder可以直接使用item的点击事件不用单独设置分隔线不可以定向刷新某一条数据@Override@Override@Override@Override} else {recycleview的用法继承的是Recycleview.Adapter必须使用viewholder,封装了view的复用。
2023-03-21 17:29:22
377
原创 AIDL 详细介绍及使用
从某种意义上说AIDL其实是一个模板,因为在使用过程中,实际起作用的并不是AIDL文件,而是据此而生成的一个IInterface的实例代码,AIDL其实是为了避免我们重复编写代码而出现的一个模板。方法入手,在上面的代码中可以看到,主要的作用就是根据传入的Binder对象转换成客户端需要的 IMyAidlInterface 接口。服务端的代码差不多就这些,下面我们来看看客户端的,客户端也是需要 AIDL 文件的,可以从服务端中复制过来。看完上面方法的介绍,我们回过头来看看 AIDL 例子中实现的流程。
2023-03-20 18:47:19
7591
转载 Android WorkManager使用介绍
新建一个MyWork类继承Worker类,重写dowork()方法,在其中添加希望由WorkManager 运行的工作任务@NonNull@Override//任务的具体行为doWork()将返回执行结果Result,会通知WorkManager服务工作是否成功,以及工作失败时是否应重试工作。Result.success():工作成功完成。Result.failure():工作失败。Result.retry():工作失败,应根据其重试策略在其他时间尝试。
2023-03-20 11:51:42
723
原创 Java线程同步synchronized和Lock锁
指令重排序是编译器优化代码的一种操作,我们大部分写的代码中,彼此的顺序(不会影响程序逻辑),谁在前谁在后无所谓~编译器会通过调整代码的前后顺序从而提高程序效率。许多线程可能是可运行状态但只能有一个线程在运行该线程将持续运行直到它自行终止或者是由于其他的事件导致阻塞亦或者是出现高优先级线程成为可运行的则该线程失去CPU的占用权。- 所谓的非公平锁是指,线程获取锁的顺序不是按照访问的顺序先来先到的,而是由线程自己竞争,随机获取到锁。想要得到的结果是0但是最终的结果却不是我们想要的也不是我们可以控制的。
2023-03-19 11:51:57
648
原创 HashMap和Hashtable的区别
HashMap和Hashtable它的底层存储机制都是数组加列表的结构,但是在jdk 1.8版本之后HashMap增加了一个新的结构叫做红黑树。
2023-03-17 10:26:39
295
原创 SurfaceView与普通view的区别
SurfaceView第一印象它是一个view,因为它继承了View,有两个直接子类GLSurfaceView,VideoView。但根据SDK文档SurfaceView和普通的view又有较大区别。最显著的区别就是普通view和它的宿主窗口共享一个绘图表面(Surface),SurfaceView虽然也在View的树形结构中,但是它有属于自己的绘图表面,Surface 内部持有一个Canvas,可以利用这个Canvas绘制。
2023-03-14 22:53:58
639
转载 Android与JS交互详解
先来说说什么是JS交互:说的俗一点就是通过我们项目中的控件来调用HTML里的JS代码,也可以通过JS来调用项目中的代码。
2023-03-01 14:27:45
6018
原创 RN踩坑:java.lang.RuntimeException: Unable to load script from assets ‘index.android.bundle‘.
1、报错提示:Unable to load script.Make sure you're either running a metro server( run 'react-native start' ) or that your bundle 'index.android.bundle' is packaged correctly for release.
2023-02-15 14:52:56
907
转载 线程池详解
拒绝策略提供顶级接口 RejectedExecutionHandler ,其中方法 rejectedExecution 即定制具体的拒绝策略的执行逻辑。
2023-02-09 19:54:48
722
原创 Flex布局
如果一个项目的该属性设置为0,则空间不足时该项目也不缩小。如果设置为一个固定的值,则该项目在容器中占据固定的大小。采用flex布局的元素被称作容器,在flex布局中的子元素被称作项目。flex属性是 flex-grow属性、flex-shrink属性、flex-basis属性的简写。3、flex-flow属性是flex-deriction和flex-wrap属性的简写,默认值为[row nowrap];Flex是Flexible Box的缩写 ,flex布局表示弹性布局,可以为盒状模型提供最大的灵活性。
2022-11-13 20:44:20
148
ggplot2从理论到实践
2018-10-19
《Tensorflow:实战Google深度学习框架》 PDF版
2018-10-18
白话深度学习与TensorFlow
2018-10-18
机器学习实战、文档+代码
2018-10-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人