
Android
文章平均质量分 88
xyzso1z
这个作者很懒,什么都没留下…
展开
-
Android开发规范[Java+android]
说明:该文档由阿里《Java开发规范》和《Android开发规范》整理而来 【强制】必须遵守,违反本约定或将会引起严重的后果; 【推荐】尽量遵守,长期遵守有助于系统稳定性和合作效率的提升; 【参考】充分理解,技术意识的引导,是个人学习、团队沟通、项目合作的方向。一、编码规范(一)命名规范【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:...原创 2020-03-22 23:32:45 · 582 阅读 · 0 评论 -
Android知识体系总结
1. UI自定义ViewView基础measurelayoutdrawPath类Canvas类android事件分发机制原创 2019-05-06 21:06:32 · 530 阅读 · 1 评论 -
room数据库升级
val songId: String,//歌曲idval songName: String,//歌曲名称val songType: Int,//歌曲类型:1:歌曲 2:听书。原创 2024-03-09 17:20:40 · 1997 阅读 · 1 评论 -
ArrayList源码阅读笔记
1. 基础知识1.1 概念ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类。该类封装了一个动态再分配的Object[]数组,每个对象都有一个capacity属性,表示它们所封装的Object[]数组长度,当向ArrayList中添加元素时,该属性会自动增加。如果向ArrayList中添加大量元素,可使用ensureCapacity()方法一次性增加capacity,可以减少增加重分配的次数提高性能。ArrayList的用法和Vector相似,但Vector是一个原创 2022-12-03 14:39:14 · 207 阅读 · 0 评论 -
Android打包流程
这个资源索引 标在给定资源ID和设备配置信息的情况下,能够在应用程序的资源目录中快速地找到最匹配的资源。因为在项目中会依赖不同的库、组件,也会有多渠道的需求,所以merge这一步操作就是将不同地方的资源文件进行整合,多个manifest文件需要整理成一个完整的文件,所以如果有属性冲突这一步就会报错。所有没有编译的资源,如images、assets目录下资源(该类文件是一些原始文件,App打包时并不会对其进行编译,而是直接打包到apk中,对于 这一类资源文件的访问,应用层代码需要通过文件名对其进行访问)。原创 2022-10-25 00:49:25 · 4995 阅读 · 0 评论 -
Kotlin协程
使用协程已经有较长的时间了,但一直停留在launch、async启动协程,suspend方法挂起的阶段。这段时间系统梳理Kotlin知识时才发现,对协程(仅对Kotlin)还有很多概念不甚了解。例如CoroutineScope对协程生命周期的重要性、协程父子结构的作用、结构化并发、一些Kotlin协程中约定俗称的规定等。一、什么是协程我们尝试从几个比较流行的说法来解释协程到底是个什么东西,而不是再增加一种让人猜不透的说法协程是轻量级线程(官方表述)可以换个说法,协程就是方法调用封装成类线程的AP转载 2022-04-02 14:33:59 · 9385 阅读 · 0 评论 -
Android 渲染机制
Android 渲染机制应用程序的帧率是多少呢?我们的目标是,让应用程序在其整个生命周期中,始终保持60FPS的帧速率。这意味着要在一秒内刷新60次,也就是每16.6667毫秒刷新一次。Android 系统每隔16ms发出VSYNC信号,触发对UI进行渲染,那么整个过程如何保证在16ms内就能达到一个流畅的画面。屏幕撕裂和垂直同步关于刷新,主要有两方面需要考虑:帧速率: 指的是设备的GPU每秒能为整个屏幕绘制多少帧。我们的目标是维持Android设备的标准。刷新率: 指的是屏幕在一秒内更新的原创 2020-11-14 17:41:00 · 521 阅读 · 0 评论 -
android sutido连接不上真机
问题一 :无驱动步骤一:下载usb driver打开Android studio ——>tools——>sdk manager——>sdk tools选择Google usb driver 点击apply进行下载步骤二配置usb driver将你的手机用数据线连接电脑右击此电脑——>属性——>设备管理器——>便携设备右击你的手机——>更新驱动程序——>浏览我的计算机以查找驱动程序软件选择刚才下载的usb driver 的下载路径,一般原创 2020-11-07 22:25:22 · 228 阅读 · 0 评论 -
productFlavors创建不同产品
前言:因为当前产品运营策略发生变化,需要把产品给当地运营商运营,所以就需要把App的名称和icon进行定制化改变,并且需要在app接口中增加运营商包的特定channelCode。因为要修改app的名称和icon所以不能够使用pick...原创 2020-09-06 17:27:00 · 1204 阅读 · 1 评论 -
Bound services
一、基础知识绑定服务是Service类的实现,可让其它应用与其进行绑定和交互。如要为服务提供绑定,必须实现onBind()回调方法。该方法会返回IBinder对象,该对象定义的编程接口可供客户端用来与服务进行交互。二、创建绑定服务创建提供绑定的服务时,必须提供IBinder,进而提供编程接口,以便客户端使用此接口与服务进行交互。可以通过三种方法定义接口:扩展Binder类如果服务是提供给自己应用专用,并且在与客户端相同的进程中运行(常见情况),则应通过扩展Binder类并从onBind()返回该原创 2020-08-23 15:10:18 · 225 阅读 · 0 评论 -
Service基础知识
一、简介Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。Service可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到 Service 与之进行交互,甚至执行进程间通信(IPC)。例如,服务可在后台处理网络事物、播放音乐,执行文件I/O或内容提供程序进行交互。以下三种不同的服务类型:Foreground前台服务执行一些用户能注意到的操作。例如,音频应用汇使用前台服务来播放音频曲目。前台服务必须显示通知。即使用户停止与应用的交原创 2020-08-19 11:09:05 · 1538 阅读 · 0 评论 -
Fragment与Activity、Fragment相互交互
一、分类1 Activity 与 Fragment 之间通信Activity 传递数据到 FragmentFragment 传递数据到 Activity2 Fragment 与 Fragment 之间通信二、Activity 与 Fragment 之间通信2.1、Activity 如何传递数据到 Fragment方法1使用Fragment.setArguments(bundle),把bundle设置到fragment ,在Fragment中onCreateView()中取出。在Ac原创 2020-08-09 17:02:39 · 887 阅读 · 0 评论 -
Fragment生命周期
一、定义Activity 界面中的一部分,可理解为模块化的ActivityFragment 不能独立存在,必须嵌入到Activity中Fragment 具有自己的生命周期,接收它自己的事件,并可以在Activity进行时被添加或删除Fragment 的生命周期直接接收所在Activity的影响。如:当Activity 暂停时,它拥有的所有Fragment都暂停二、生命周期...原创 2020-07-26 15:30:27 · 240 阅读 · 0 评论 -
Fragment的创建和使用
一、Fragment添加至Activity由于 Fragment 作为 Activity 一部分,所以 Fragment 的使用一般是添加到Activity 中将 Fragment 添加到 Activity 中一般有2种方法:在 Activity 的 layout.xml 布局文件中静态添加在 Activity 的 .java 文件中动态添加方法 1:在 Activity 的 layout.xml 布局中静态添加Fragment 的布局文件fragment_test.xml<L原创 2020-07-26 15:07:20 · 2207 阅读 · 0 评论 -
TextView富文本
一、富文本介绍TextView 富文本显示主要有两种方式:SpannableString 类html下面介绍这两种方式实现二、SpannableString 类作用:修改字体( StyleSpan )[粗体、斜体等]文本字体( TypefaceSpan )修改文字颜色( ForegroundColorSpan )文字绝对大小( AbsoluteSizeSpan )文字相对大小( RelativeSizeSpan )图片( ImageSpan )设置图片( DynamicDra原创 2020-07-19 01:56:26 · 2250 阅读 · 0 评论 -
任务与返回堆栈
任务是用户在执行某项工作时与之互动的一系列Activity的集合。这些Activity 按照每个Activity 打开顺序排列在一个返回堆栈中。大多数任务都从设备主屏幕上启动。当用户轻触应用启动器中的图标(或主屏幕上的快捷方式)时,该应用的任务就会转到前台运行,如果该应用没有任务存在(应该最近没有使用过),则会创建一个新的任务,并且该应用的“主”Activity将会作为堆栈的根Activity打开。在当前Activity启动另一个Activity时,新的Activity将被推送到堆栈顶部并获得焦点。上一原创 2020-07-12 14:18:40 · 273 阅读 · 0 评论 -
Android属性动画
本文章源码属性动画特点:作用对象不只是View对象,甚至没有对象也可以。动画效果不只是4中基本变换,还有其他动画效果。作用领域:API11 后引入。工作原理在一定时间间隔内,通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。从上述工作原理可以看出属性动画有两个非常重要的类:ValueAnimator类和ObjectAnimator类。一、ValueAnimator类通过不断控制 值 的变化,再不断 手动 赋给对象的属性,从而实现动画效果原创 2020-06-30 20:11:31 · 225 阅读 · 0 评论 -
Intent和Intent过滤器
1.概览Intent是一个消息传递对象。可以用来从其它应用组件请求操作。Intent 可以通过多种方式进行组件之间的通信,但其基本用处主要包括以下三个:启动Activity将Intent传递给startActivity(),可以启动新的Activity实例。Intent用于描述要启动的Activity,并携带任何必要的数据。如果希望在Activity完成后收到结果,可以调用startActivityForResult(),在Activity的onActivityReuslt()回调中接收。启动原创 2020-06-14 18:52:06 · 396 阅读 · 0 评论 -
Activity 状态更改
前言用户触发和系统触发的不同事件会导致Activity从一个状态转换到另一个状态。本文主要介绍发上此类转换的一些常见情况,以及如何处理这些转换。在交接本文之前需要知道Activity状态的情况,可以查看上一篇文章 《Activity生命周期》配置发生了更改有很多事件会触发配置更改。最显著的例子就是横竖屏之间的切换。其他情况,如语言或输入设备的改变等,也可能导致配置更改。当配置发生更改时,Activity会销毁并重新创建。原始Activity实例将触发onPause()、onStop.原创 2020-06-01 20:09:21 · 743 阅读 · 1 评论 -
Activity生命周期
在生命周期回调方法中,可以声明用户离开和再次进入Activity时Activity的行为方法。例如,如果正在视频播放,当用户切换至另一应用时,你的应用可能要暂时停止视频并终止网络连接,当用户返回时,你可以重新连接到网络,并允许用户从同一位置播放视频。换言之,每个回调都支持你执行适合给定状态变更的特定操作,在合适的时间执行正确的操作,并妥善处理转换,这将提升应用的稳健性和性能。一、Actitvity生命周期概念原创 2020-05-24 01:11:54 · 2042 阅读 · 0 评论 -
5.9.0总结
分享人:沈永辉时 间:2020.5.15问题:xml 布局层级(尽量减少布局层级、尽量使用RelativeLayout)修改前<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"> <LinearLayout android:orientat.原创 2020-05-15 17:19:05 · 208 阅读 · 0 评论 -
Android视图动画(补间动画| 逐帧动画)
视图动画原创 2020-04-19 23:47:57 · 402 阅读 · 1 评论 -
android动画分类及概括
1. 概括原创 2020-04-09 21:49:58 · 362 阅读 · 0 评论 -
support-annotations @IntDef的使用(替代枚举)
1. 枚举利弊以及枚举倒底占多少内存注:此部分内容转自Android是否推荐使用枚举(enum)?使用枚举的利弊以及枚举倒底占多少内存? 在此感谢分享1.1 安卓中是否推荐使用枚举enumAndroid 官方建议:Android官网不建议使用enums,占用内存多(Enums often require more than twice as much memory as stati...原创 2020-04-05 03:26:08 · 284 阅读 · 0 评论 -
android异常整理
NullPointerException 空指针异常IllegalArgumentException 参数不合法异常UnsupportedOperationException 功能不支持异常原创 2020-04-03 15:00:33 · 198 阅读 · 0 评论 -
5.7.3总结(瀑布流列表展示)
1.效果效果: 由于现csdn只支持某些平台视频 想看效果请点击瀑布流效果2. 开发中遇到的问题两列内容没有居中显示,如下图:处理方法:让内容item的布局文件最顶层布局宽度不要写死,设置其为math_parent滑动时列表会闪烁,两列内容交换(由于ViewHolder的复用):处理方法: final StaggeredGridLayoutManager layoutMan...原创 2020-04-02 01:24:01 · 593 阅读 · 0 评论 -
自定义View之Canvas
1. 简介定义:画布,是一种绘制使得会泽原创 2020-03-29 22:07:46 · 412 阅读 · 0 评论 -
自定义View之Path类
1. 简介定义: 路径,即无数个点连接起来的线作用:设置绘制的顺序&区域Path 只用于描述顺序&区域,单使用Path无法产生效果应用场景:绘制复杂图形Path类封装了由直线和曲线(2,3次贝塞尔曲线)构成的几何路径2. 基础2.1 开放路径与闭合路径的区别3.具体使用3.1 对象创建// 使用Path首先要new一个Pat...原创 2020-01-14 18:13:15 · 295 阅读 · 0 评论 -
Android studio使用
1.查看类继承结构"ctrl" + "h"2.查看类结构"alt" + "7"3. 打包命令原创 2019-12-25 17:50:15 · 121 阅读 · 0 评论 -
TextView竖直滚动
public class AutoScrollTextView extends TextSwitcher implements ViewSwitcher.ViewFactory { private static final int FLAG_START_AUTO_SCROLL = 1001; private static final int FLAG_STOP_A...原创 2019-12-13 14:18:21 · 141 阅读 · 0 评论 -
自定义View之Draw
1. draw过程详解类似measure过程、layout过程,draw过程根据View的类型分为2种情况:接下来,详细分析这2种情况下单draw过程3.1 单一View的draw过程原理(步骤)View绘制自身(含背景、内容);绘制装饰(滚动指示器、滚动条和前景)具体流程下面我将一个个方法进行详细分析:draw过程的入口=draw()/** * 源码...原创 2019-11-06 01:10:09 · 348 阅读 · 0 评论 -
View之Layout过程
1.作用计算视图(View)的位置即计算View的四个顶点位置:Left、Top、Right、Bottom2.layout过程详解类似measure过程,layout过程根据View的类型分为2种情况:3.1单一View的layout过程应用场景:在无现成的控件View满足需求、需要自己实现时,则使用自定义单一View具体使用:继承自View、SurfaceVie...原创 2019-11-03 02:02:43 · 495 阅读 · 0 评论 -
自定义View Measure过程
1. 作用测量View的宽/高在某些情况下,需要多次测量(measure)才能确定View最终的宽/高;该情况下,measure过程后得到的宽/高可能不准确;此处建议:在layout过程中onLayout()去获取最终的宽/高;2.储备知识了解measure过程前,需要先了解传递尺寸(宽/高测量值)的2个类:ViewGroup.LayoutParams()Measur...原创 2019-11-02 00:42:55 · 292 阅读 · 0 评论 -
自定义View基础一
1.视图(View)定义视图(View)表现为显示在屏幕上的各种视图,如TextView、LinearLayout等。2.视图分类视图View主要分两类:类别解释特点单一视图即一个View,如TextView不包含子View视图组即多个View组成的ViewGroup,LinearLayout包含子ViewAndroid 中的UI组件...原创 2019-10-19 15:36:37 · 296 阅读 · 0 评论 -
2.2.0开发总结
2.2.0开发总结1. 遇到的问题1. 翻页显示屏等待呼叫列表开发需求:每页显示6行共展示2页每页显示4s后自动显示下一页 最后一页显示完后显示第一页 List&lt;TTicket&gt; waitingTicketList = Collections.synchronizedList(new ArrayList&lt;TTicket&gt;());//用于储存等待的号...原创 2018-11-15 11:17:26 · 177 阅读 · 0 评论 -
android杂记
1.去除手机界面默认标题Ⅰ.每个类都需要添加此代码(在setContentViewFeature(R.layout.activity);之前) this.requestWindowFeature(Window.FEATURE_NO_TITLE);Ⅱ.统一去掉所有activity的头修改默认样式为:<style name="appname" parent="appB...原创 2017-06-20 19:06:59 · 262 阅读 · 0 评论 -
5.1总结
1.drawable转Bitmapprivate Bitmap drawable2Bitmap(Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } else if ...原创 2019-07-22 17:21:41 · 139 阅读 · 0 评论 -
Android6.0 M 开发特性
Android 6.0 M1.权限动态申请原创 2019-06-11 10:22:51 · 267 阅读 · 0 评论 -
Android 性能优化 - 详解内存优化的来龙去脉
前言APP内存的使用,是评价一款应用性能高低的一个重要指标。虽然现在智能手机的内存越来越大,但是一个好的应用应该将效率发挥到极致,精益求精。什么是内存通常情况下我们说的内存是指手机的RAM,它主要包括一下几个部分: - 寄存器(Registers读音:[ˈrɛdʒɪstɚ]) 速度最快的存储场所,因为寄存器位于处理器内部,所以在程序中我们无法控制。 - 栈(Stack) 存放基...转载 2019-02-19 13:44:57 · 1124 阅读 · 0 评论 -
第一天
1.CopyOnWriteArrayList的原理和使用方法原文 CopyOnWriteArrayList:CopyOnWriteArrayList这是一个ArrayList的线程安全的变体,其原理大概可以通俗的理解为:初始化的时候只有一个容器,很常一段时间,这个容器数据、数量等没有发生变化的时候,大家(多个线程),都是读取(假设这段时间里只发生读取的操作)同一个容器中的数据,所以这样大...原创 2018-07-09 23:11:44 · 174 阅读 · 0 评论