android
文章平均质量分 94
麦田里的守望者-Jiang
No pains no gains!
展开
-
Kotlin Flow 冷流和热流
冷流需要有数据生产者、0或多个中间操作、数据消费者才能一起构建成为一个完整的流。它的执行原理类似 Kotin Sequence,当有消费者 collect 或其它终端操作时,流开始从下往上触发,然后从上往下流动。在热流 SharedFlow 中,当它创建以后它就存在了,它可以在生产者 emit 数据时,没有消费者 collect 数据而独立运行。当生产者 emit 数据后,这些数据会被缓存下来,新老消费者都可以收到这些数据,从而达到共享数据。原创 2023-04-03 09:32:12 · 1086 阅读 · 1 评论 -
Kotlin Flow 探索
响应式编程,可以理解为一种面向数据流编程的方式,也就是使用数据源构建数据流 → 修改数据流中的值 → 处理数据流结果值,在这个过程中,一系列的事件或操作都是按顺序发生的。在 Java 环境中,RxJava 框架实现了响应式编程,它结合了数据流、观察者模式、线程框架;在 Kotlin 环境中,Kotlin 协程和 Flow 结合在一起实现了响应式编程,其中协程就是线程框架,Flow 就是数据流。不管是 RxJava 还是 Kotlin 协程和 Flow 的实现的响应式编程,它们的目的都是为原创 2023-01-12 10:29:34 · 1002 阅读 · 1 评论 -
Kotlin 协程探索
Kotlin 协程是一套线程 API 框架,在 Kotlin 语言环境下使用它做并发编程比传统 Thread, Executors 和 RxJava 更有优势,代码逻辑上“同步非阻塞“,而且简洁,易阅读和维护。suspend是 Kotlin 语言中一个关键字,用于修饰方法,当修饰方法时,该方法只能被suspend修饰的方法和协程调用。此时,也预示着该方法是一个耗时方法,告诉调用者需要在协程中使用。Android 上的 Kotlin 协程下一篇,将研究 Kotlin Flow。原创 2023-01-04 11:02:48 · 1063 阅读 · 0 评论 -
Kotlin 惰性集合操作-序列 Sequence
Kotlin 标准库提供的集合操作函数:filter,map, flatmap 等,在操作的时候会创建存储中间结果的临时列表,当集合元素较多时,这种链式操作就会变得低效。为了解决这种问题,Kotlin 提供了惰性集合操作Sequence接口,只有在 末端操作被调用的时候,也就是获取结果的时候,序列中的元素才会被逐个执行,处理完第一个元素后,才会处理第二个元素,这样中间操作是被延期执行的。而且因为是顺序地去执行每一个元素,所以可以先做 filter 变换,再做 map 变换,这样有助于减少变换的总次数。原创 2023-01-03 09:00:00 · 778 阅读 · 1 评论 -
Android 静态代码检查
随着项目的不断迭代,以及代码的增加和开发人员的增加,代码规范或代码质量的把控,是当前版本发布前必要的一环。在当前开发流程中:编码→构建→测试→发布,代码规范或代码质量相关问题,只能靠人工 Review,或灰度和线上 Bugly 反馈。人工 Review 代码,可能比较费时以及遗漏部分Case,而灰度和线上 Bugly 反馈,为时已晚。所以,要在版本发布前尽量去发现代码质量问题,避免带到线上(被动反馈),可以在构建过程之前中去添加 静态代码检查环节,让每一次的构建都能自动地去分析代码是否存在质量问题。原创 2022-09-08 10:27:10 · 2951 阅读 · 7 评论 -
Android Jetpack LifeCycle 实现原理分析
MVVMLifeCycleLifeCycle:抽象类,用于访问 Activity 或 Fragment 的生命周期;LifecycleObserver:接口,生命周期观察者,它没有任何方法,依赖注解 OnLifecycleEvent;OnLifecycleEvent:注解,主要是声明方法监听 Lifecycle.Event 的哪一个事件;Lifecycle.Event :LifeCycle的内部枚举类,定义了 LifecycleOwner(也就是Activity 或 Fragment )的生命原创 2021-08-24 11:18:31 · 401 阅读 · 0 评论 -
Android Git Hooks
前言在项目开发过程中,如果想在提交代码前或提交代码后,或在执行其它特定的 Git 相关操作时,去做一些自动化的事情,这时就可以利用 Git 钩子。比如:本地执行 git commit 时,自动去检验 commit 的 message 是否符合规范。通常,Git 钩子分为 客户端钩子和服务端钩子。客户端钩子客户端钩子主要有:pre-commit,commit-msg 等pre-commit 钩子在键入提交信息前运行。 它用于检查即将提交的快照,例如,检查是否有所遗漏,确保测试运行,以及核查代码。原创 2021-07-07 21:21:11 · 1036 阅读 · 0 评论 -
Android APK 反编译工具 JADX
JADX 介绍GitHub 地址:https://github.com/skylot/jadxJADX 支持将 APK, dex, aar, zip 中的 dalvik 字节码反编译为 Java 代码,也支持反编译 AndroidManifest.xml 和 resources.arsc 资源。JADX 安装首先安装 JDK1.8 或以上版本,Git,以及 Android 开发环境。创建要下载的 JADX 存储文件路径,然后在命令行切换到该目录,执行以下命令:git clone htt原创 2020-12-10 12:03:13 · 2245 阅读 · 1 评论 -
Android 上传项目到Jcenter
文章目录注册账号Add New Repository(创建仓库)Add to Package(创建包)API Key上传项目上传 Android library 或 Java library添加依赖开始上传上传Android Plugin 或 Java Plugin添加依赖开始上传上传项目后的一些操作是否可以正常下载删除文件发布到Jcenter参考注册账号登陆 https://bintray....原创 2019-11-27 20:53:54 · 684 阅读 · 1 评论 -
APT:comment(注释工具)
commentcomment 的主要作用是将类注释扫描到文档中。通过在类中添加类注解@Comment,在项目编译的时候,生成.java 和.html 文档,帮助开发人员一览项目 API。如何使用?1.在你需要生成注释文档的类中添加注解@Comment,如在工具类DisplayUtil中添加:package com.example.comment.util;/** * 页面相关 *...原创 2019-11-23 16:31:49 · 828 阅读 · 0 评论 -
Android Debug与Release环境切换
在Android开发中,通常会有Debug和Release环境,比如:Debug环境用测试接口,Release环境用正式接口;Debug环境打印Log,Release环境不打印Log等等。1.BuildConfig文件BuildConfig文件是项目编译后自动生成的,它存在于module的 \build\generated\source\buildConfig文件夹下面:其实BuildConfig原创 2017-08-10 19:50:00 · 11759 阅读 · 0 评论 -
快速使用ConstraintLayout
ConstraintLayout是在2016年Google I/O 大会上发布的,使用它可以减少布局的层级结构关系,从而达到在绘制视图过程中减少measure,layout,draw的时间损耗,最后加快界面渲染时间,防止丢帧导致卡顿不流畅现象。 Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60f原创 2017-10-16 20:58:13 · 812 阅读 · 0 评论 -
关于使用PopupWindow的一些问题
##1.背景变暗 在弹出PopupWindow的时候,设置Window的alpha(透明度)和dim(暗淡值)两个值。 final Window window = getWindow(); final WindowManager.LayoutParams params = window.getAttributes(); window.addFlags原创 2017-06-22 15:10:14 · 1381 阅读 · 0 评论 -
为什么使用LeakCanary检测内存泄漏?
内存泄漏原因不再需要的对象依然被引用,导致对象被分配的内存无法被回收,这就是内存泄漏的原因。原创 2018-11-03 18:19:31 · 2265 阅读 · 0 评论 -
adb常用命令
adb shell wm1.获取手机分辨率adb shell wm size2.获取手机物理密度adb shell wm density原创 2018-12-04 12:06:17 · 9782 阅读 · 0 评论 -
在应用程序Crash时收集可用的信息
AppCrash在应用程序crash时收集一些信息,目前收集的信息如下:设备基本信息:手机品牌,手机品牌类型,手机制造商,手机系统版本,手机SDK版本,手机屏幕分辨率,手机屏幕密度。手机应用程序内存信息: try { if (am != null) { appMemoryJSON.put("memoryClass&amp原创 2018-12-07 17:50:38 · 1412 阅读 · 0 评论 -
NestedScrollingParent 和 NestedScrollingChild 嵌套滑动原理介绍
在介绍NestedScrollingParent 和 NestedScrollingChild 嵌套滑动之前,先介绍下View的事件分发机制,因为NestedScrollingParent 和 NestedScrollingChild 主要是很好地解决了View滑动冲突问题。View的事件分发机制一次点击事件由三个重要的方法来共同完成:dispatchTouchEvent、onIntercep...原创 2019-02-23 22:13:34 · 5934 阅读 · 2 评论 -
Retrofit 中的注解以及如何自定义接口方法注解
前言Retrofit 是一个网络请求框架,它在Android领域已经被使用很长一段时间了。我们知道它的特点就是用注解来描述 HTTP 请求:支持 URL 参数替换和查询参数将对象转换为请求主体(例如,JSON、协议缓冲区)多部分请求正文和文件上传这些注解主要用来标识接口方法和接口方法参数,并预示着一个请求将会被如何处理。...原创 2019-07-10 12:04:11 · 4131 阅读 · 7 评论 -
Java 动态代理 Proxy
前言本打算写一篇 “如何在 Retrofit (网络加载框架) 的接口中自定义注解”的文章,但其中涉及到Java 动态代理,所以先写一篇文章来搞懂Java 动态代理。动态代理类Proxy在 Java 中的动态代理,实际上指的就是反射包java.lang.reflect下的 类 Proxy。Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类...原创 2019-06-30 11:54:19 · 3151 阅读 · 1 评论 -
Android 防止空指针异常
文章目录空指针异常防止空指针异常Java 注解Java 8 中的 Optional 类型Kotlin总结空指针异常先复习下异常。异常分为 Exception 和 Error,Exception 和 Error 类都继承自Throwable类。Exception(程序可恢复):表示程序可以处理的异常,可以捕获并且可恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常...原创 2019-07-29 10:23:40 · 3480 阅读 · 0 评论 -
GridView 条目选中放大被遮挡问题
之前开发了一个在Android TV 上的应用,遇到了一个问题:在鼠标移到菜单选项上的时候,放大该菜单选项,但没想到放大这些菜单选项之后,要么遮挡了其它的菜单选项,要么被其它的菜单选项遮挡了。在网上搜了很多,但是没有解决问题,下面提供我最后想到的解决方案。 下面为解决前和解决后的对比图: 条目没有选中时,背景颜色为白色,选中时,背景颜色为绿色。 首先,子View原创 2015-12-09 17:33:37 · 1665 阅读 · 0 评论 -
加速Android Studio编译
1.使用阿里的freeline Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队在Android平台上的量身定做的一个基于动态替换的编译方案,稳定性方面:完善的基线对齐,进程级别异常隔离机制。性能方面:内部采用了类似Facebook的开源工具buck的多工程多任务并发思想, 并对代码及资源编译流程做了深入的性能优化。怎么使用freeline以及使用freeline的相关问题?请查看关于原创 2017-04-13 16:59:08 · 1376 阅读 · 0 评论 -
Android中的Transition(一)
本文翻译自:Animate all the things. Transitions in Android让所有的一切都动起来谷歌在Material Design有这样一个阐述:动画不再仅是iOS才有。这里有一种新概念叫Material motion。 Motion提供了另外一层含义:让呈现在用户面前的对象没有被破坏连贯性,即使它们改变或者重组。在Material Design中的Motion被用翻译 2017-02-27 18:36:42 · 3358 阅读 · 1 评论 -
Android中Gridview和ViewPager显示图片的优化处理(2)
解决在Android查看大图导致的OOM,使用ViewPager和ImageSwither做优化处理。原创 2015-06-09 16:26:08 · 1958 阅读 · 0 评论 -
Android中联系人和通话记录详解(1)
由于项目开发需要用到手机联系人和通话记录的详细信息,于是对联系人和通话记录的表及各字段以及具体实现做了详细分析。 首先,通过模拟器或者Root过的手机,在/data/data/com.android.providers.contacts/database文件夹下得到contacts2.db数据库文件,然后用SQLite Expert软件打开,可以看到有如下表: 其中,与通话原创 2015-09-13 17:49:14 · 13862 阅读 · 0 评论 -
Speex语音压缩与解压在Android上的实现
由于项目需要做语音降噪处理,最近做了这方面的研究。但结果却没有达到,反而却学得了基于Speex的语音压缩和解压,也算没有白白浪费时间(300K的语音文件经过Speex压缩后文件大小变为了30K左右,对于网络传输非常好)。希望通过与大家分享和交流,解决共同遇到的难题。 关于Speex:http://www.speex.org/ Speex主要提供的技术:原创 2015-09-06 17:48:12 · 8611 阅读 · 3 评论 -
Android中联系人和通话记录详解(2)
在文章Android中联系人和通话记录详解(1)中对通话记录进行了分析,本章将对联系人的数据库表、字段以及Insert,Query,Delelte,Update四大基本数据操作进行分析。 与联系人相关的主要的表总共有四个:contacts,data,mimetypes,raw_contacts。contacts表的字段和外键关系:data表的字段和外键关系:原创 2015-10-09 16:39:07 · 6025 阅读 · 2 评论 -
Android通话记录过滤和监听
1.通话记录过滤 通常在显示通话记录的时候,只需要显示每个人通话记录的最后一次,那么就要过滤掉每个人多次通话记录的其它记录,一想到这个,自然就想到sql group by语句,但是通过Android提供的内容提供者getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder)去查询,不能在其原创 2015-09-30 18:31:44 · 4009 阅读 · 2 评论 -
Android调用系统添加和编辑联系人的返回结果
有时候,在开发应用程序的时候,需要调用系统的添加或者编辑联系人功能,接下来将对联系人应用程序源码做一些分析。 首先,到GitHub上下载联系人应用程序的源代码https://github.com/android/platform_packages_apps_contacts(Google在GitHub上托管的Android所有的源代码地址为:https://github.com/an原创 2015-09-23 15:32:55 · 4869 阅读 · 6 评论 -
java.security.NoSuchProviderException: no such provide:BC
在客户端和服务端交互的时候,为了让传输的数据不被原创 2014-10-14 14:57:18 · 3429 阅读 · 0 评论 -
Android中Gridview和ViewPager显示图片的优化处理(1)
目的在于解决在GridView中显示图片时加载速度缓慢,内存溢出等等问题。原创 2015-06-08 10:57:08 · 1671 阅读 · 0 评论 -
关于Xfermode的介绍和用处(遮罩图层,圆形图片)
1.关于Xfermode类从上面看出Xfermode有三个子类:AvoidXfermode,PixelXorXfermode,PoterDuffXfermode。它们分别表示:AvoidXfermode:在绘图时,要么绘制在最顶层,要么绘制在除最顶层以外的地方。PixelXorXfermode:这种转换不遵循自左乘的约定,因此这种模式总返回不透明的颜色(alpha=255),由原创 2016-02-15 15:33:46 · 2504 阅读 · 0 评论 -
android:clipToPadding的使用
android:clipToPadding定义了ViewGroup是否将裁剪它的子View,和根据 它的padding(如果padding不为0)调整任何边缘效果。这个属性的默认值是true。必须是boolean值,ture或false。关联方法:setClipToPadding(boolean)设置RecyclerView的paddingTop在xml中设置RecyclerView的属性 an原创 2017-01-19 16:08:15 · 27022 阅读 · 4 评论 -
Android 关于使用阿里Freeline遇到的问题
关于freeline:Freeline - Android平台上的秒级编译方案 freeline github地址:https://github.com/alibaba/freeline使用freeline之后,从30分钟变到了30秒,谢谢阿里的技术。1.Python版本目前支持python2.0以上版本,不支持3.0以上版本。python2.7.2下载地 址:https://www.pytho原创 2016-12-07 20:51:38 · 3533 阅读 · 3 评论 -
Android Design Support Library
1.Navigation View对于应用程序,它代表着一个标准的导航菜单。菜单内容可以由菜单资源文件填充。NavigationView通常放在一个DrawerLayout里面。 <?xml version="1.0" encoding=&am原创 2016-08-30 17:20:50 · 1259 阅读 · 0 评论 -
解决启动Android应用程序时出现白屏或者黑屏的问题
一般情况下,启动页面通常是全屏的,而且会用一张图片来展示用户打开应用程序后第一眼看到的界面。在手机中点击应用程序的图标到应用程序显示完MainActivity的视图这个过程中,通常会用一到两秒的时间。在默认activity的主题下(Light or Black),这两秒屏幕就会出现白屏(Light)或者黑屏(Black)- 实际上是activity默认的主题中的android:windowBackground为白色原创 2016-06-23 15:20:15 · 20045 阅读 · 2 评论 -
自定义字母索引View
在联系人,好友等列表中,为了能够快速的根据名称查找到相应的联系人或者好友,通常会建立一个可以根据字母快速定位名称的View。如下图中右边字母表所示: 1.自定义View关于自定义View需要注意的事项:让View支持padding让View支持wrap_content如果是View,只需重写onDraw()方法;如果是ViewGroup,有必要重写onMeasure()和onLayout()原创 2016-07-04 17:14:44 · 2368 阅读 · 0 评论 -
保持你的应用程序响应
本文翻译自:Keeping Your App Responsive 翻译人员:麦田里的守望者-Rye保持你的应用程序响应在Android中,系统会针对一段时间没有响应的应用程序,通过显示对话框来告诉你的应用程序已经停止响应,如图1中的对话框所示。这个时候,一旦你的应用程序有相当长的一段时间未响应,系统就会为用户提供一个退出应用程序的选项。为了让系统决不在用户面前呈现ANR对话框,在你的应用程序中设翻译 2016-06-18 16:56:20 · 553 阅读 · 0 评论 -
Android 自定义相机获取照片(屏幕适配)
1.在应用程序中自定义相机拍照的大体步骤如下: 1.检测和访问相机:检测设备是否支持拍照,然后发出访问设备相机请求。 2.创建一个预览类:创建一个继承自类SurfaceView和实现接口SurfaceHolder接口的相机预览类,这个类用来预览从相机得到的实时的图片.。 3.新建一个预览布局:一旦创建了相机预览类,还需要创建一个可以包含预览界面且可以操原创 2016-02-01 15:38:31 · 4762 阅读 · 0 评论 -
An internal error occurred during....单元测试
1.在网上查找资料说以下方法就能解决:Project-->Properties-->Run/Debug Settings:. select "Launching New_configuration"(要测试的类).Delete.Ok但是这样做之后并没有解决我的Bug2.后来仔细分析,单元测试引出这个Bug的原因是在workplace中找不到这个工程,原来我没有把这个工程导入原创 2014-08-05 11:37:04 · 726 阅读 · 0 评论