- 博客(1737)
- 资源 (224)
- 问答 (1)
- 收藏
- 关注
转载 Git使用规范(Android版)
引言本文根据Git分支管理策略,结合Git Flow分支管理实践,制定了这个适合Android开发中的Git版本管理规范。同时结合实际操作演示了使用示例,希望对你有所帮助。1. 各分支简介下面分支中提到的的 version 应该替换为具体的版本,name 应该替换为具体的开发人员姓名,content 应该替换为需要优化的地方。master分支git的默认分⽀,主分支,不...
2019-08-22 14:55:16 2728 7
转载 不是人人都懂的学习要点
http://www.cnblogs.com/watsonyin/archive/2012/10/22/2734741.html学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 一.学习也是一种能力看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。
2012-12-12 15:54:05 7582 11
转载 一个三流学校程序员的奋斗
文章是转载的,我不是一个毅力很强的人,总得一些激励人的文章来激励自己 我也在一个三流的学校,在找有关考研的文章的时候看到这篇文章觉得不错,不敢独享,拿出来共勉…… 看完后我又一次明白,勤能补拙,一个人的成功,往往在于坚持没有挫折,不经历艰难的日子,就没有美好的明天……忘了是谁说的:当你感觉到艰难的时候,正是你在走上坡路的时候
2012-06-08 14:47:26 10091 20
原创 饺子播放器Jzvd切换全屏播放原理
继续看第一个方法第四行开始,毫无疑问,作者获取getDecorView()根视图,然后将原来的对象放入了跟视图,同时隐藏了状态栏,也即是开启了全屏模式,汗,简单粗暴。从上方代码第三行跳转到下面这个方法,可以看出作者用构造器构造了一个新的对象替代了原来位置的对象。还不够,那如何从全屏模式回来呢,作者在打开全屏的时候,就将原视图的父容器存放到了一个链表中。
2024-03-28 14:31:45 159
原创 Android RecyclerView用代码动态设置item的selector
上述代码states[0]一维数组里有两个状态,当着两个状态都成立的时候selected这个颜色才生效,所以这里回答了一个问题,为什么第一个参数是二维的,因为可以对应多个状态。在XML中我们可以通过不同状态设置true然后设置color="hex_color"来达到不同状态显示不同颜色的目的,下面是总结的状态表。注意:这个是为view设置颜色,不是背景,如果为背景设置颜色,需要使用StateListDrawable。在drawable下创建的xml都是作为背景使用的,背景可以使用纯颜色也可以使用图片。
2024-03-20 14:30:42 299
原创 Android自定义View——可以设置最大宽高的FrameLayout
Override// 计算子View的宽度和高度i++) {// 根据测量模式设置最终的宽度和高度// 设置最终的宽度和高度使用自定义FrameLayout使用自定义的FrameLayout和使用普通的FrameLayout没有太大的区别,只需要在布局文件中使用我们定义的CustomFrameLayout即可。-- 子View的布局 -->/*** *//***/
2024-03-11 15:57:42 631 1
转载 Android Aidl的使用
别忘了对象是不能跨进程传递的,对象的跨进程传递本质上是反序列化的过程,这就是为什么 AIDL 中的自定义对象都必须要实现 Parcelable 接口。实际开发中,我们要传入的数据可能是 JavaBean 类型的,需要先进行序列化,Android 的序列化推荐用 Parcelable。在 project 视图下,在 main 目录新建 Aidl File ,会生成一个 Aidl 文件夹,用来存放 aidl 文件。新建 ICarManager.aidl 文件, 本例中,只添加获取和增加的接口,
2024-03-08 14:36:59 33
原创 Android动态添加view设置view大小(宽高)
第一种:ViewGroup在添加子view的时候设置layoutParams。第二种:子view本身设置layoutParams。
2024-03-05 10:27:02 345
原创 Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
在问题排除过程中,根据网上的博客猜测是版本Gradle和Gradle Plugins不匹配产生的问题,但是发现sync的过程中,build.gradle、settings.gradle中并未有如上现象。原因是,我曾经按照博客教学安装AS的时候,刚打开AS的第一个界面就是让我设置AS的Proxy,而按照某些过时的博客上所讲,从官方的源下载会很慢,于是我就设置了代理并规定了端口号。也就是说,你在AS里面下载Gradle是走AS里面的代理,而我后来gradle sync中下载的gradle插件则是走的全局设置。
2024-03-02 14:00:27 768
转载 如果面试这样说HashMap,那么稳了
HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
2024-02-18 23:40:23 66
转载 JVM相关面试题
类加载器是一个用来加载类文件的类。Java 源代码通过 javac 编译器编译成类文件。然后 JVM 来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的类文件。实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。
2024-02-18 21:42:09 66
转载 详解JVM对象内存布局以及内存分配规则
程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此时程序计数器为Undefined。Java 虚拟机栈是描述 Java 方法运行过程的内存模型。Java 虚拟机栈会为每一个即将运行的 Java 方法创建一块叫做“栈帧”的区域,用于存放该方法运行过程中的一些信息,如:局部变量表操作数栈动态链接方法出口信息......
2024-02-18 18:20:46 114
原创 Kotlin和Java 单例模式
最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。饿汉式懒汉式线程安全的懒汉式双重校验锁式静态内部类式PS:该篇文章不讨论单例模式的运用场景与各种模式下的单例模式的优缺点。只讨论在Java下不同单例模式下的对应Kotlin实现。
2024-02-05 11:46:22 2165
转载 Kotlin作用域函数let、with、run、apply、also
函数名函数体内使用的对象返回值letit函数块的最后一行或指定return表达式withthis或省略函数块的最后一行或指定return表达式runthis或省略函数块的最后一行或指定return表达式applythis或省略thisalsoitthis。
2024-02-05 11:38:33 77
原创 gradlew与jdk版本不匹配,可以通过配置指定jdk 版本
在Gradle构建工具中, org.gradle.java.home 属性用于指定Gradle在构建过程中使用的Java JDK的安装路径。它是一个全局属性,可以在项目级别或全局级别进行设置。当Gradle构建项目时,它将使用指定的JavaJDK版本来编译和运行项目代码。默认情况下,Gradle将使用系统默认的JavaJDK。但是,在某些情况下,您可能希望使用不同的JavaJDK版本,比如您的项目需要特定版本的Java或需要与其他项目兼容。当Gradle下次构建项目时,它将使用指定的Java JDK版本。
2024-02-04 23:09:43 479
转载 Android基于Gradle8.0的插件开发
之前使用Groovy、Java 、 手动配置的方式演示了Gradle插件的整个自定义流程《自定义gradle插件》。本文使用java-gradle-plugin 和 Kotlin重新梳理下Gradle插件的自定义流程。1、新建一个Module模块hui_plugin(选择Kotlin Library)2、在hui_plugin模块的build.gradle.kts中引入“java-gradle-plugin” 和 “org.jetbrains.kotlin.jvm” 插件。
2024-02-04 19:07:17 297
原创 Android kotlin build.gradle.kts配置
重新build了下代码,然后找编译后的代码,发现确实没有生成BuildConfig。之前代码相比,也就是AGP的版本升级了下,那猜测是不是跟AGP8.0.0的版本有关,于是在BuildType中手动添加了个buildConfigField,想以此方式强制生成下BuildConfig。我们在新建一个项目然后直接进行Build apk,可以生成一个app_debug.apk的apk文件,那么文件是怎么产生的呢?不同flavor的应用,加载不同的lib,然后某些代码文件,资源也可以使用对应文件夹下的内容替代。
2024-02-04 18:55:12 3579 1
转载 使用 LiveDataBus 替代 EventBus
可以看到相比第一版的 LiveDataBus ,改良版增加了许多代码,因为 version 机制,但反过来一想,如果没有这个 version ,我们一样还是要自己实现粘性订阅的功能,在 Android 帮我们实现了这个功能后,我们再自己增加非粘性订阅的功能,其实都差不多。优点UI 和数据保持实时同步,因为 LiveData 采用观察者模式,只要数据发生改变就立刻通知订阅者。避免内存泄漏,订阅者和生命周期绑定,当宿主销毁时订阅者能够马上清理自身数据。
2024-02-02 16:13:32 103
原创 Android性能优化:直播推流使用对象池
根据Android Handler里面的Message实现思想,实现自定义的对象池。#性能优化之Android应用内存优化实战#
2024-01-27 16:49:18 217
转载 java实现双向链表的增删改查
双链表顾名思义,就是链表由单向的链变成了双向链。使用这种数据结构,我们可以不再拘束于单链表的单向创建于遍历等操作,大大减少了在使用中存在的问题。
2024-01-27 16:42:46 87
转载 偏向锁和重量级锁的多连问,你能接住几个?
jvm因为加入了偏向锁逻辑而大大提高了同步锁的速度。但是偏向锁不是万能的,尤其是现在互联网应用并发越来越高,偏向锁在过多的争抢下反而会影响效率并且很快就会发生膨胀,已经越来越偏离了了它设计时的初衷。当前的Java应用中也基本会使用JUC包来做并发的同步,偏向锁的使用场景越来越少。当然硬件性能的提升也在削弱偏向锁的优势,所以Java15默认关闭了偏向锁。当然,本篇文章对于你参加面试还是能够提供一点点帮助的😄。
2024-01-24 13:16:49 82
原创 面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?
notify 唤醒线程的规则是随机唤醒还是顺序唤醒取决于 JVM 的具体实现,作为主流的 HotSpot 虚拟机中的 notify 的唤醒规则是顺序的,也就是 notify 会按照线程的休眠顺序,依次唤醒线程。
2024-01-24 11:24:27 546
转载 java注解的详细使用(APT、插桩、反射)
什么是apt:APT,就是Annotation Processing Tool的简称,就是可以在代码编译期间对注解进行处理,并且生成Java文件,减少手动的代码输入。注解我们平时用到的比较多的可能会是运行时注解,比如大名鼎鼎的retrofit就是用运行时注解,通过动态代理来生成网络请求。编译时注解平时开发中可能会涉及的比较少,但并不是说不常用,比如我们经常用的轮子Dagger2, ButterKnife, EventBus3 都在用,所以要紧跟潮流来看看APT技术的来龙去脉。
2024-01-17 22:24:08 104
转载 24张图带你彻底理解Java中的21种锁
为了提高性能, Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。现在绝大多数的个人电脑和服务器都是多路(核)处理器系统,如果物理机器有一个以上的处理器或者处理器核心,能让两个或以上的线程同时并行执行,就可以让后面请求锁的那个线程“稍等一会”,但不放弃处理器的执行时间,看看持有锁的线程是否很快就会释放锁。多个线程获取锁的顺序,不是按照先到先得的顺序,有可能后申请锁的线程比先申请的线程优先获取锁。
2024-01-15 12:05:16 75
转载 理解AQS的原理及应用总结
AQS全称为AbstractQueuedSynchronizer,是Java中用于构建锁和同步器的框架性组件,它是Java并发包中ReentrantLock、Semaphore、ReentrantReadWriteLock等同步器的基础。在开发中,我们可以利用AQS提供的同步机制来实现线程的协作和同步,从而达到线程安全的目的。使用ReentrantLock实现同步:ReentrantLock是一个可重入独占锁,可以使用它来实现线程的同步。
2024-01-11 13:12:03 157
原创 可重入锁和不可重入锁
如果把证件/卡看作是同步锁,把关卡看作是同步域(即同步代码块/方法或显式锁锁定的代码),那么可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁,这样的锁就叫做可重入锁。Reentrant = Re + entrant,Re是重复、又、再的意思,entrant是enter的名词或者形容词形式,翻译为进入者或者可进入的,所以Reentrant翻译为可重复进入的、可再次进入的,因此ReentrantLock翻译为重入锁或者再入锁。
2024-01-10 19:06:50 1070
原创 java并发之阻塞队列ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue和非阻塞队列ConcurrentLinkedQueue
基于单向链表实现,使用volatile保证可见性,使得在读场景下不需要使用其他同步机制;使用乐观锁CAS+失败重试保证写场景下操作的原子性使用延迟更新首尾节点的思想,大大减少CAS次数,提升并发性能;使用哨兵节点,降低代码复杂度,避免一个节点时的竞争在入队操作时,会在循环中找到真正的尾节点,使用CAS添加新节点,再判断是否CAS更新尾节点tail在入队操作的循环期间一般情况下是向后遍历节点,由于出队操作会构建哨兵节点,当判断为哨兵节点(next指向自己)时,根据情况定位到尾节点或头节点(“跳出”)
2024-01-10 14:37:36 979
原创 Queue接口分析
区分阻塞队列和非阻塞队列的关键因素是什么?按照大多数文章的介绍,阻塞队列支持阻塞特性,在队列满或为空时会阻塞,但是我想到队列必须是线程安全的,阻塞队列(前文表格中的那5个阻塞队列)都是利用悲观加锁,互斥做到线程安全的,貌似加锁在某种程度上也等价于阻塞,巧合的是非阻塞队列(比如ConcurrentLinkedQueue)又是利用乐观锁实现线程安全的,乐观锁可以理解成未加锁。在《JAVA中的阻塞队列和非阻塞队列》一文中,介绍非阻塞队列时有如下:基于锁的算法会带来一些活跃度失败的风险。
2024-01-10 13:05:30 891
转载 深入了解java虚拟机
1、程序计数器是线程私有,描述的是当前线程下一条需要执行的字节码指令行号;2、虚拟机栈描述的是 Java 方法执行的内存模型;3、本地方法栈与虚拟机栈类似,区别在于虚拟机栈执行 Java 方法,而本地方法栈执行 native 方法;4、堆是虚拟机上最大的一块内存,绝大多数对象都是存储在堆上的,垃圾回收机制操作的主要区域也是堆;5、方法区主要存放虚拟机加载的类相关数据。垃圾回收机制(Garbage Collection,GC)
2024-01-10 00:16:17 52
转载 Android Realm数据库使用
也就是说,Realm实例在线程中,如果没有Looper,是不能收到更新通知的,list.add(new TestUser(2,"adidass", "110119", 28, "云南德克萨斯州", "海员", "男"));list.add(new TestUser(0,"android", "123123", 20, "河南常德", "传菜员", "女"));list.add(new TestUser(4,"hibrid", "120250", 26, "赣州", "贼", "男"));
2023-12-22 21:03:36 401
转载 Android Jetpack框架-LiveData和Room使用
LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态。LiveData 只会将更新通知给活跃的观察者。
2023-12-22 20:43:58 179
转载 Java内存模型
误解:volatile修饰的变量保证了对所有线程的可见性,所以基于volatile修饰的变量的运算在并发下是线程安全的。这个观点的论据是正确的,但是根据论据得出的结论是错误的,并不能得出这样的结论。volatile的规则保证了read、load、use的顺序和连续性,同理assign、store、write也是顺序和连续的。也就是这几个动作是原子性的,但是对变量的修改或者对变量的运算,却不能保证是原子性的。
2023-12-18 19:39:57 177 1
转载 ASM 插桩采集方法入参,出参及耗时信息
ASM字节码插桩技术在Android开发中有着广泛的应用,但相信很多人会不知道怎么上手,不知道该拿ASM来做点什么。学习一门技术最好的方法就是动手实践,本文主要通过ASM插桩采集方法的入参,出参及耗时信息并打印,通过一个不大不小的例子快速上手ASM插桩开发。通过上述步骤,我们就把ASM插桩实现记录方法入参,返回值以及方法耗时的功能完成了,通过插桩可以在方法执行的时候输出我们需要的信息。而这些信息的价值就是可以很好的让我们做一些程序的全链路监控以及工程质量验证。
2023-12-16 21:29:38 112
转载 Android 启动优化-有向无环图
说到 Android 启动优化,大家第一时间可能会想到异步加载。将耗时任务放到子线程加载,等到所有加载任务加载完成之后,再进入首页。多线程异步加载方案确实是 ok 的。但如果遇到前后依赖的关系呢。比如任务2 依赖于任务 1,这时候要怎么解决呢。最简单的方案是将任务1 丢到主线程加载,然后再启动多线程异步加载。如果遇到更复杂的依赖呢。任务3 依赖于任务 2, 任务 2 依赖于任务 1 呢,这时候你要怎么解决。更复杂的依赖关系呢。
2023-12-16 13:17:08 120 1
转载 Flutter插件的制作和发布
注意圈着的部分,工程类型一定要选择Plugin,然后填写包名,选择开发语言,对于开发语言的选择有几点建议:如果你将要制作的插件没有引入第三方sdk,或者只引入了一些工具类的库,那么根据你熟悉或喜欢的语言随意选择;我们在用xcode打开ios工程前,要确保你的mac中已经安装了flutter和cocoapods环境,因为flutter plugin是以pods方式集成的,确认没问题后,可以先使用mac端AS打开项目,并运行,这时AS会自动执行pod install,并自动配置项目的xcode环境。
2023-12-12 23:07:49 169
转载 Flutter Native 插件开发 (Android)
这三种方式,无论是传递方法还是事件,本质上都是传递的数据。具体使用哪种通信方式,要看使用场景,同一种功能可以通过不同的方式来实现。比如获取手机电量,网络变化等可以通过。
2023-12-12 18:25:22 182
转载 Flutter 自定义插件基础
BasicMessageChannel:用于传递字符串和半结构化的信息MethodChannel:用于传递方法调用(method invocation)EventChannel: 用于数据流(event streams)的通信MethodChannel总共有3个成员变量在Flutter中会存在多个Channel,一个Channel对象通过name来进行唯一的标识,所以在Channel的命名上一定要独一无二,推荐采用组件名_Channel名 组合来进行命名。
2023-12-12 18:00:20 119
Android将list数据通过LitePal保存到本地(集合保存到本地)
2016-06-17
AndroidDownLoad-多线程断点续传下载
2016-06-14
DownloadEngine-Android多线程下载断点续传
2016-06-14
android-rsa-http
2016-06-12
RxJava在Android中内存泄漏解决以及RxJava的封装
2016-05-23
Android H5做的商城客户端
2016-04-29
Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
2016-03-31
Android Bluetooth蓝牙通信文件传输
2016-03-27
Android蓝牙聊天程序的扩展开发(基于Google Sample,类QQ设计)
2016-03-26
Android蓝牙聊天程序优化版
2016-03-26
Android 通过Socket 和服务器通讯
2016-02-16
android RangeSeekBarView 选定范围值的控件
2016-02-01
Android仿天天动态上拉播放界面控件
2016-01-31
Flutter编程指南-多线程
2022-02-21
java数据结构与算法之美(物超所值)
2022-02-09
flutter_macos_2.8.1-stable.zip
2022-01-05
mac_apktool.zip
2021-03-25
Postman-osx-5.3.2 for Mac
2017-10-31
CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar
2016-08-19
android自定义进度条渐变色View的实例代码
2016-07-26
Android多行文本折叠展开效果
2016-07-25
Android封装popwindow类(下拉菜单弹出和收缩效果)
2016-07-22
Android自定义spinner下拉框
2016-07-16
Android DigitalClock实现倒计时
2016-07-12
Android 带箭头有光晕效果的ProgressBar
2016-07-04
android webview与 js交互通信
2016-06-20
Android项目webview中做与js交互
2016-06-20
Android客户端提供Socket服务与pc通过USB通信
2016-06-17
Android 使用Socket,ServerSocket编程网络通信
2016-06-17
Android socket即时通信Demo
2016-06-17
自定义view和自定义动画怎么学习比较好呢?
2016-11-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人