- 博客(1753)
- 资源 (224)
- 问答 (1)
- 收藏
- 关注
转载 Git使用规范(Android版)
引言本文根据Git分支管理策略,结合Git Flow分支管理实践,制定了这个适合Android开发中的Git版本管理规范。同时结合实际操作演示了使用示例,希望对你有所帮助。1. 各分支简介下面分支中提到的的 version 应该替换为具体的版本,name 应该替换为具体的开发人员姓名,content 应该替换为需要优化的地方。master分支git的默认分⽀,主分支,不...
2019-08-22 14:55:16 2786 7
转载 不是人人都懂的学习要点
http://www.cnblogs.com/watsonyin/archive/2012/10/22/2734741.html学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 一.学习也是一种能力看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。
2012-12-12 15:54:05 7592 11
转载 一个三流学校程序员的奋斗
文章是转载的,我不是一个毅力很强的人,总得一些激励人的文章来激励自己 我也在一个三流的学校,在找有关考研的文章的时候看到这篇文章觉得不错,不敢独享,拿出来共勉…… 看完后我又一次明白,勤能补拙,一个人的成功,往往在于坚持没有挫折,不经历艰难的日子,就没有美好的明天……忘了是谁说的:当你感觉到艰难的时候,正是你在走上坡路的时候
2012-06-08 14:47:26 10103 20
转载 Android Binder分析
为服务创建binder_node:cookies指向native层的BnxxxService对象;proc指向server进程。向serviceManager注册该binder_node。在内核中会创建binder_ref,node指向该binder_node,同时分配desc值(由注册的顺序决定..)。回到serviceManager的用户态,在svcinfos服务链表中,加入一个svcinfo对象。进行了两次拷贝。从client用户态到内核态从内核态到server的用户态。
2024-04-15 00:19:01 14
原创 Android ParcelFileDescriptor实现进程间通信
来建立一个pipe通信通道,ParcelFileDescriptor数组第一个元素是read端,第二个元素是write端,通过write端的AutoCloseOutputStream和read端的AutoCloseInputStream,我们就可以实现进程见的数据流传输了。两端业务层都把Uri对应的ParcelFileDescriptor发送给通信层,发送端通信层从AutoCloseInputStream中取数据发送,接收端通信层获取到数据后,写入到AutoCloseOutputStream中。
2024-04-14 23:28:53 840
转载 Android windowManager弹窗点击空白关闭弹窗
但是如果是一个windowManager操作添加的window弹窗,这个时候就需要我们自己去监听外部的点击事件,然后把自己隐藏掉。1、弹窗的属性flag设置WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,设置了这个属性之后,才能监听view之前的触摸事件。2、设置OnTouchListener,监听外部触摸。项目上遇到这样一个需求,按键增减音量的时候会有一个window弹窗出来,在点击弹窗以外的地方需要立刻让其消失。
2024-04-12 17:17:38 22
原创 Android匿名共享内存(Ashmem)
共享内存是进程间通讯的一种方式,通过映射一块公共内存到各自的进程空间来达到共享内存的目的。通常进程内存空间是4G,这个大小是由内存指针长度决定的,如果指针长度32位,那么地址最大编号为0xffffffff, 为4G。上面的内存实际指的是进程的虚拟地址空间,还需要经过内存映射才能访问到真实的物理内存,这些工作对用户是透明的,不需要用户关心,操作系统都已经帮我们做好了。通常虚拟内存地址和物理内存地址,但是存在一种对应关系。
2024-04-07 21:01:44 867 1
转载 Android 使用AIDL传输超大型文件
一道面试题:使用AIDL实现跨进程传输一个2M大小的文件 - 掘金该文章与本文类似,都是使用AIDL向接收端传输,不过该文中使用共享内存MemoryFile构造出,MemoryFile的创建需要使用反射,对于使用MemoryFile映射超大型文件是否会导致内存占用过大的问题,我个人没有尝试,欢迎有兴趣的朋友进行实践。ParcelFileDescriptor 是一个封装了文件描述符的类,可以通过 Binder 传递给其他进程,实现跨进程访问文件或网络套接字。
2024-04-07 20:20:31 59
转载 Android 车载应用开发与分析 - 编写基于AIDL 的 SDK
AIDL,Android 接口定义语言,是Android开发中常用的一种进程间通信方式。关于如何使用AIDL请参考Android 接口定义语言 (AIDL) | Android 开发者 | Android Developers这里介绍一些AIDLin单向数据流向。被in修饰的参数,会顺利传到Server端,但Servier端对实参的任何改变,都不会回调给Client端。out单向数据流向。
2024-04-07 19:40:23 24
原创 android:scrollbars 滑动滚动条代码控制
Android中的View对于ScrollBar和Scroll的支持是非常灵活的,不仅仅是UI样式可变,计算参数的方式也是可变的。在Android中,任何View都可以显示出ScrollBar,唯一的条件是自身高度不足以显示全部内容。
2024-04-07 10:26:12 886
转载 全面理解Android内存优化
到这里,对于Android内存优化中需要了解的理论基础就简略的介绍完了,掌握理论基础,一方面开发中,我们可以避免犯一些低级错误,提高代码的质量,另一方面在日后做内存优化时会变得更加游刃有余,或许就不会产生“卧槽,这样为什么又会内存泄漏”的疑问了。到这里,对于Android内存优化中常用的三种工具就介绍完了。熟练掌握各种分析工具的使用,能够帮助我们快速定位、解决开发中遇到的各种内存问题。既能帮助程序员提升自我,也能给用户一个良好的使用体验。
2024-04-06 16:28:33 23
原创 Android 代码自定义drawble文件实现View圆角背景
相信大多数Android开发都会遇到一个场景,给TextView或Button添加背景颜色,修改圆角,描边等需求。一看到这样的实现效果,自然就是创建drawble文件,设置相关属性shap,color,radius等。然后将drawble文件设置给对应的view即可实现想要的效果。但是作为一个SDK,如果不同的app都需要修改自己独特的颜色,圆角等需求,如何以最小的改动来满足不同app的需求呢?
2024-04-05 16:57:15 797 1
转载 Android车载应用开发——音视频基础知识与MediaPlayer
多媒体应用是车载信息娱乐系统的一个重要组成部分,一般包含音视频播放、收音机、相册等。
2024-04-04 16:39:12 416
原创 Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
2. 计算文本客滑动到哪里即可停止, (行高*总文本行数)- (行高 * 最多显示行数) int sum = getLineHeight() * getLineCount() - getLineHeight() * getMaxLines();1.当前是上滑动还是下滑动(相对于屏幕) ,使用ev.getRawY()获得当前滑动位置在屏幕哪个地方。左右对齐的TextView。
2024-04-02 16:28:25 521
转载 【原理篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview
上一篇文章【使用篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview已经讲解了如何实现嵌套滑动,这篇文章,让我们一起来看他的实现原理。废话不多说,开始进入正文。讲解之前,先简单说一下嵌套滑动的一些概念。(熟悉这个的哥们可以直接跳过这个)说到嵌套滑动,大家应该都不陌生。他是 Google 在 5.0 之后推出来的 NestedScroll 机制。可能初学者会有这样的疑问?想比较于传统的事件分发机制,NetstedScroll 机制有什么优点。
2024-04-02 15:39:44 35
原创 Android 自定义View 测量控件宽高、自定义viewgroup测量
主要思路:对FlowLayout的所有子View逐个进行测量,获得measuredHeight和measuredWidth,在水平方向上根据这个尺寸依次对View进行放置,放不下则另起一行,每一行的高度取该行所有View的measuredHeight最大值。3.1、单个子View测量。
2024-04-01 11:26:44 971
转载 Android中自定义LinearLayout中layout方法不起作用的原因
看到第五、六步发现,LinearLayout是以左侧为基准,处理子View的位置排布的,其中,涉及到了一个很重要的属性margin,它是通过循环,控制childLeft的值,然后调用setChildFrame方法,在该方法中,最终调用的view.Layout方法。所以在外部的onLayout方法中,无论你怎么设置四个参数,压根就影响不到有用的的布局参数,所以,需要给view设置它们的params就可以了。重点来了,然后自己实现一个自定义LinearLayout的时候,还是按部就班。....省略计算过程。
2024-04-01 09:48:20 26
转载 Android 动态添加 View 并显示在指定位置
DecorView 有唯一一个子 View,它是一个垂直 LinearLayout,包含两个子元素,一个是 TitleView( ActionBar 的容器),另一个是 ContentView(窗口内容的容器)也是一个 FrameLayout(android.R.id.content),平常用的 setContentView 就是设置它的子 View。下面就得介绍另一个方法呢。其实添加以后,还得考虑事件的点击之类的,比如可以通过设置回调,当点击引导动画的时候,先隐藏动画,再去主动促发按钮的点击逻辑等。
2024-03-30 17:16:09 63
原创 Android WindowManager工具类
WindowManager提供三个方法: addView()、updateLayout()、removeView()。分别对应是添加view、更新view、移除view。其他工具类大家搜索一个就可以了。
2024-03-29 20:14:43 373
原创 饺子播放器Jzvd使用过程中遇到的问题汇总
继续看第一个方法第四行开始,毫无疑问,作者获取getDecorView()根视图,然后将原来的对象放入了跟视图,同时隐藏了状态栏,也即是开启了全屏模式,汗,简单粗暴。从上方代码第三行跳转到下面这个方法,可以看出作者用构造器构造了一个新的对象替代了原来位置的对象。还不够,那如何从全屏模式回来呢,作者在打开全屏的时候,就将原视图的父容器存放到了一个链表中。
2024-03-28 14:31:45 300
原创 Android RecyclerView用代码动态设置item的selector
上述代码states[0]一维数组里有两个状态,当着两个状态都成立的时候selected这个颜色才生效,所以这里回答了一个问题,为什么第一个参数是二维的,因为可以对应多个状态。在XML中我们可以通过不同状态设置true然后设置color="hex_color"来达到不同状态显示不同颜色的目的,下面是总结的状态表。注意:这个是为view设置颜色,不是背景,如果为背景设置颜色,需要使用StateListDrawable。在drawable下创建的xml都是作为背景使用的,背景可以使用纯颜色也可以使用图片。
2024-03-20 14:30:42 342
原创 Android自定义View——可以设置最大宽高的FrameLayout
Override// 计算子View的宽度和高度i++) {// 根据测量模式设置最终的宽度和高度// 设置最终的宽度和高度使用自定义FrameLayout使用自定义的FrameLayout和使用普通的FrameLayout没有太大的区别,只需要在布局文件中使用我们定义的CustomFrameLayout即可。-- 子View的布局 -->/*** *//***/
2024-03-11 15:57:42 719 1
转载 Android Aidl的使用
别忘了对象是不能跨进程传递的,对象的跨进程传递本质上是反序列化的过程,这就是为什么 AIDL 中的自定义对象都必须要实现 Parcelable 接口。实际开发中,我们要传入的数据可能是 JavaBean 类型的,需要先进行序列化,Android 的序列化推荐用 Parcelable。在 project 视图下,在 main 目录新建 Aidl File ,会生成一个 Aidl 文件夹,用来存放 aidl 文件。新建 ICarManager.aidl 文件, 本例中,只添加获取和增加的接口,
2024-03-08 14:36:59 74
原创 Android动态添加view设置view大小(宽高)
第一种:ViewGroup在添加子view的时候设置layoutParams。第二种:子view本身设置layoutParams。
2024-03-05 10:27:02 465
原创 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 1386 1
转载 如果面试这样说HashMap,那么稳了
HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
2024-02-18 23:40:23 80
转载 JVM相关面试题
类加载器是一个用来加载类文件的类。Java 源代码通过 javac 编译器编译成类文件。然后 JVM 来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的类文件。实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。
2024-02-18 21:42:09 81
转载 详解JVM对象内存布局以及内存分配规则
程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此时程序计数器为Undefined。Java 虚拟机栈是描述 Java 方法运行过程的内存模型。Java 虚拟机栈会为每一个即将运行的 Java 方法创建一块叫做“栈帧”的区域,用于存放该方法运行过程中的一些信息,如:局部变量表操作数栈动态链接方法出口信息......
2024-02-18 18:20:46 179
原创 Kotlin和Java 单例模式
最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。饿汉式懒汉式线程安全的懒汉式双重校验锁式静态内部类式PS:该篇文章不讨论单例模式的运用场景与各种模式下的单例模式的优缺点。只讨论在Java下不同单例模式下的对应Kotlin实现。
2024-02-05 11:46:22 2178
转载 Kotlin作用域函数let、with、run、apply、also
函数名函数体内使用的对象返回值letit函数块的最后一行或指定return表达式withthis或省略函数块的最后一行或指定return表达式runthis或省略函数块的最后一行或指定return表达式applythis或省略thisalsoitthis。
2024-02-05 11:38:33 101
原创 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 643
转载 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 456
原创 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 5132 1
转载 使用 LiveDataBus 替代 EventBus
可以看到相比第一版的 LiveDataBus ,改良版增加了许多代码,因为 version 机制,但反过来一想,如果没有这个 version ,我们一样还是要自己实现粘性订阅的功能,在 Android 帮我们实现了这个功能后,我们再自己增加非粘性订阅的功能,其实都差不多。优点UI 和数据保持实时同步,因为 LiveData 采用观察者模式,只要数据发生改变就立刻通知订阅者。避免内存泄漏,订阅者和生命周期绑定,当宿主销毁时订阅者能够马上清理自身数据。
2024-02-02 16:13:32 169
原创 Android性能优化:直播推流使用对象池
根据Android Handler里面的Message实现思想,实现自定义的对象池。#性能优化之Android应用内存优化实战#
2024-01-27 16:49:18 235
转载 java实现双向链表的增删改查
双链表顾名思义,就是链表由单向的链变成了双向链。使用这种数据结构,我们可以不再拘束于单链表的单向创建于遍历等操作,大大减少了在使用中存在的问题。
2024-01-27 16:42:46 104
转载 偏向锁和重量级锁的多连问,你能接住几个?
jvm因为加入了偏向锁逻辑而大大提高了同步锁的速度。但是偏向锁不是万能的,尤其是现在互联网应用并发越来越高,偏向锁在过多的争抢下反而会影响效率并且很快就会发生膨胀,已经越来越偏离了了它设计时的初衷。当前的Java应用中也基本会使用JUC包来做并发的同步,偏向锁的使用场景越来越少。当然硬件性能的提升也在削弱偏向锁的优势,所以Java15默认关闭了偏向锁。当然,本篇文章对于你参加面试还是能够提供一点点帮助的😄。
2024-01-24 13:16:49 88
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关注的人