android
文章平均质量分 73
秘密小房间的呆屁
努力得舒服,自然平庸得彻底--手机微信同号13923495466,添加请备注
展开
-
AndroidStudio搞怪进度条插件
分享一个彩虹猫进度条插件,为工作增添乐趣,哈哈原创 2021-12-11 18:08:12 · 2810 阅读 · 0 评论 -
Kotlin之数据流Flow-Kotlin在Android中的使用(六)
简介Google官方描述:Flow是基于协程构建的数据流,数据流是可通过异步方式进行计算处理的一组数据序列。所发出值的类型必须相同。例如Flow 是发出整数值的数据流。数据流与生成一组序列值的 Iterator 非常相似,但它使用挂起函数通过异步方式生成和使用值。这就是说,例如,数据流可安全地发出网络请求以生成下一个值,而不会阻塞主线程。数据流包含三个实体:提供方会生成添加到数据流中的数据。得益于协程,数据流还可以异步生成数据。(可选)中介可以修改发送到数据流的值,或修正数据流本身使用方则使原创 2021-11-15 10:49:21 · 1374 阅读 · 0 评论 -
Kotlin的协程使用小结-Kotlin在Android中的使用(五)
简介在项目中使用一段时间协程后,确实能体会到协程对于异步回调的简化,让我觉得最方便的是,作为调用方时无需关心应该使用哪个线程来执行函数,通常写函数时可以规定好线程。协程是Google官方推荐的Android异步编程解决方案,具有轻量,内存泄漏更少,内置取消支持,Jetpack集成等特点在网上收集了一些对于协程的...原创 2021-11-11 16:39:36 · 3130 阅读 · 0 评论 -
插件化实现原理(学习笔记六)
介绍:插件化本质上来说是运行没有安装的apk,支持插件的app一般称为宿主。宿主提供上下文环境通常作为主APP在运行时加载和运行插件,这样便可将app中一些不常用的功能模块做成插件,一方面可以减少安装包的大小,另一方面可以实现APP功能的动态扩展优势:让用户不用重新安装 APK 就能升级应用功能,减少发版本频率,增加用户体验。提供一种快速修复线上 BUG 和更新的能力。按需加载不同的模块,实现灵活的功能配置,减少服务器对旧版本接口兼容压力。模块化、解耦合、并行开发、 65535 问题。实现原理:在原创 2020-12-23 18:32:55 · 571 阅读 · 2 评论 -
Android性能优化之网络优化
流程优化前先描述一下一条正常网络请求的流程:DNS 解析,请求DNS服务器,获取域名对应的IP地址;与服务器建立连接,包括 TCP三次握手,安全协议同步流程;连接建立完成,发送和接收数据,解码数据;在了解了网络请求的流程后,针对上面这三步流程分别进行优化:一、DNS优化在 Android APP 访问网络的时候,第一步就是 DNS 解析,默认使用运行商的 LocalDNS 服务,DNS 完整的解析流程很长,会先从本地系统缓存取,若没有就到最近的 DNS 服务器取,若没有再到主域名服 务器取原创 2020-11-04 19:37:08 · 1916 阅读 · 0 评论 -
Android性能优化之容器使用
一款Android应用除了具备实现好用的功能和清晰明了的交互之外,对性能也应该有极致的追求,对每一个点做好优化,积少成多最终做出高性能的APP,能极大的增强用户的体验优化的目标从优化的目的来看,可分为以下三个:1.更快:更快指的是应用的流畅性,可从以下几点来提升APP的流畅性启动速度页面显示的速度响应的速度2.更稳定:更稳定指的是减少APP的异常情况避免出现APP崩溃(Crash)避免出现APP无响应(ANR)3.更节省:更节省指的是对资源的节省,可分为以下几点内存大小:应尽原创 2020-11-02 17:54:43 · 483 阅读 · 0 评论 -
理解JVM运行原理和垃圾回收机制(学习笔记五)
JVM基本概念首先是我们写的.java代码,通过javac编译成JVM能识别的.class文件,然后JVM将.class文件解析翻译,调用操作系统函数完成想要的操作,正是有了JVM这一抽象层,java才能跨平台运行,此外,因为JVM是解析.class文件,而不是java,所以其他诸如Groovy 、Kotlin、Jruby等等语言,它们其实也是编译成字节码,所以也可以在JVM上面跑,这样体现了JVM的跨语言特性。Java的类加载器与Android中的类加载器是不一样的,主要分为类加载-检查加载-分配内存原创 2020-08-12 14:18:55 · 505 阅读 · 2 评论 -
JMM原理与并发编程(学习笔记四)
定义Java内存模型:Java Memory Model,简称JMM,它隶属于JVM(整个计算机虚拟模型),定义了JVM在计算机内存(RAM)中的工作方式。根据《Jeff Dean在Google全体工程大会的报告》公布的数据:计算机在做一些我们平时的基本操作时,需要的响应时间是不一样的。假设没有任何缓存机制,每个数都需要从内存中读取,这样加上CPU读取一次内存需要100纳秒,262144个整数(1M的int数据)从内存读取到CPU加上计算时间一共需要262144*100+250000 = 26 4原创 2020-08-03 21:11:27 · 206 阅读 · 0 评论 -
AQS原理和队列锁机制(学习笔记三)
AQS的理解AQS是队列同步器AbstractQueuedSynchronizer的简称,它是用来构建锁或其他同步组件的基础框架,内部有一个int型变量state来表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。使用和设计模式AQS主要通过继承并实现它的抽象方法来管理同步状态,推荐使用自定义同步组件的静态内部类来继承,可以使用AQS提供的三个能保证状态安全的方法来进行操作getState、setState(int)、compareAndSetState(int expect,int原创 2020-08-01 11:26:41 · 481 阅读 · 0 评论 -
理解阻塞队列和线程池原理(学习笔记二)
阻塞队列队列介绍队列是一种先进先出的线性表结构,它的插入操作端为队尾,删除操作端为队头,在队列中插入一个元素称为入队,删除一个元素是出队。阻塞队列介绍支持阻塞插入方法:当队列满时,会阻塞向队列插入元素的线程,直到有元素出队支持阻塞移除方法:当队列为空时,获取元素的线程会等待队列变为非空阻塞队列常用于生产者消费者模式的场景,为了解决生产者和消费者处理效率不平衡的问题,通过阻塞队列来为生产者和消费者解耦,两者不直接通信,而是通过阻塞队列通信,生产者是向阻塞队列添加元素的线程,消费者是从阻塞队列拿元素原创 2020-07-31 19:45:21 · 839 阅读 · 0 评论 -
深入理解java中的线程并发(学习笔记一)
线程的状态在java中线程的启动方式只有两种:Thread.start创建一个Runnable任务交给Thread运行线程的状态分为6种:初始状态:新创建了一个Thread,但还没有start运行状态:在java中ready和running两种状态都称为运行阻塞:表示线程阻塞于锁等待:等待其他线程做出一些特定动作(中断,通知)超时等待:与等待不同,在指定时间自行返回终止:表示执行完毕死锁发生死锁,有四个必要条件:互斥:进程对所分配的资源进行排他性使用,其他进程申请该资原创 2020-07-30 21:38:25 · 343 阅读 · 0 评论 -
Kotlin的高阶函数详解-Kotlin在Adnroid中的使用(四)
Kotlin的高阶函数详解和使用高阶函数的定义如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。与java不同的是,在Kotlin中增加了一个函数类型的概念,如果我们将这种函数添加到一个函数的参数声明或返回值声明当中,那么这就是一个高阶函数了。函数类型语法基本规则:`(String,Int) -> Unit`添加到某个函数的参数声明原创 2020-07-05 19:19:48 · 963 阅读 · 0 评论 -
MTK平台编译使用到的Android overlay机制(frameworks资源文件修改无效的问题)
现象在mtk平台修改SystemUI的时候,出现了修改资源文件不生效的情况,但代码修改是生效的,很确定指向的资源文件是对的,之前在amlogic平台修改fragment资源内容并未碰到过这种情况,查阅资料后才知道mtk平台的客制化内容对部分资源文件进行了覆盖重写。资源替换机制overlay覆盖重写的资源文件在overlay文件夹下,可以通过grep命令在device目录下查找,因为可能不止一套overlay文件,真正使用的资源文件有可能在对应芯片型号的文件夹,也可能在google文件夹下,与lunch原创 2020-07-04 15:45:31 · 1886 阅读 · 0 评论 -
优化AndroidStudio内存配置(解决AS看源码卡顿问题)
我习惯使用AS来查看整个android源码,过滤时只把需要改动的工程打开,这样既可以查看全部源码,又能修改自己的工程或模块,十分方便,但我发现这样运行一段时间(十分钟左右)后,整个AS运行内存不足,卡顿到不能操作,影响效率现在电脑的配置都不会很低,一般都是8G内存+i5以上cpu,但AndroidStudio在运行代码庞大的项目或者直接看源码的时候还是会内存不足,卡到无法呼吸。原因:AS限制了Java虚拟机启动的内存大小,限制了最大堆内存,当AS运行越久,内存越不足的时候,就会频繁的触发GC,导致AS原创 2020-06-24 17:46:15 · 2165 阅读 · 1 评论 -
删除原生Setting中无用的功能(移除Preference)
删除原生Setting中无用的功能(删除Preference)原生Setting的界面是使用Preference而不是View来创建的,同时需要特殊的Activity或者Fragment的子类来显示: 如:PreferenceFragment和PreferenceActivity原生的Setting应用所包含的功能比较全面,但通常开发中总是遇到需要裁剪和定制原生应用的需求,定制需求各有不同,刚接触这类需求时,可能第一时间想到的是屏蔽UI,但在Preference没有类似View那样好用的隐藏方法,这里介原创 2020-06-20 16:33:37 · 1191 阅读 · 0 评论 -
在Android设备上使用极光推送id重复的原因分析和解决办法
引言在使用极光推送时,用于区分推送设备最重要的就是RegistrationID,如果出现相同的ID推送就会出问题原因分析RegistrationID是由设备的IMEI 、 serial_number 、deviceID三个参数决定的,出现相同的RegistrationID首先应该检查这三个参数是否为空,或出现值相同的情况。后台存储 uid 的方式是根据 appkey_dvcid->u...原创 2019-12-23 14:12:12 · 1572 阅读 · 0 评论 -
在ubuntu上配置android编译环境的过程及问题
ubuntu14.x上配置android源码编译环境安装及配置javaJDK1.8下载安装编译源码所需要的各种工具aptitude的帮助Ubuntu 14.X 64位系统兼容32位库安装及配置javaJDK1.8需要安装的javajdk可通过命令下载或拷贝两种方式1,拷贝JDK,如果有远程访问文件的环境直接拷贝就好,如果没有可以通过U盘拷贝,首先终端熟人sudo fdisk -l 查看U盘的...原创 2019-11-08 14:20:08 · 446 阅读 · 0 评论 -
android amlogic系统源码中去除屏保
系统的屏保参数由SettingsProvider控制,具体修改文件位置在frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.javaloadSetting(stmt, Settings.Global.STAY_ON_WHILE_PLUGGED_IN, ...原创 2019-07-19 16:05:22 · 1042 阅读 · 8 评论 -
Android中使用定制系统的签名文件给应用签名
在开发中,有些应用的代码不参与系统编译,而是在IDE工具中编译,然后apk参与系统编译并被签名(需要系统签名权限),在调试中时常需要替换系统中编译出来的apk,签名不同会导致安装失败。1.在程序代码中添加系统权限androidManifest.xml中添加 android:sharedUserId="android.uid.system" <manifest xmlns:andr...原创 2019-07-19 15:54:56 · 1937 阅读 · 4 评论 -
解决ListView因返回、点击、刷新UI等出现高度变化的问题
在Android开发中,有时因切换分辨率,点击,或界面切换会导致ListView的子元素出现高度变化的现象,如果在加载时将高度固定,可以避免这种情况发生:在Adapter中的getView()方法中添加如下代码,可解决高度变化的问题:@Overridepublic View getView(int position, View view, ViewGroup viewGroup) { Li...原创 2019-07-05 15:09:18 · 542 阅读 · 0 评论 -
Android中自动上下滚动的TextView
Android中自动上下滚动的TextView最近在做弹幕组件,其中有许多中动画和样式,其中一种是文字内容滚动,左右滚动很简单,设置好宽度,在onDraw中画出来就行了,这里介绍一下上下滚动的文本AutoTextView:public class AutoTextView extends TextSwitcher implements ViewSwitcher.ViewFactory原创 2017-06-20 17:39:02 · 2949 阅读 · 0 评论 -
Android获取mac地址方法,6.0以上也可用
Android获取mac地址方法,6.0以上也可用许多Android设备的应用获取服务器资源时,需要先将本机的mac地址在服务器端注册,如电视机盒子,手机的部分应用,这里记录一下开发中自己使用的获取mac地址的方法。 /** * 获取手机的MAC地址 * @return String */ public String getMac(){ Stri原创 2017-06-13 13:43:50 · 1383 阅读 · 0 评论 -
android 开发常用链接(自用,不定时更新)
Materrial Design UI图标资源: https://material.io/ Android源码下载: http://pan.baidu.com/s/1ngsZsUniversalVideoView视频播放器: http://git.oschina.net/dictfb/UniversalVideoView多套精美的视频或音乐播放器源码: https://mp.weixin.qq原创 2017-05-20 12:03:11 · 768 阅读 · 0 评论 -
如何高效优化Android网络连接以降低电耗
在开发android应用时应最大限度地减少下载和网络连接的电池寿命影响。一、高效的连接优化下载 应用的影响: 无线电的状态机由三种能量状态组成: 1、全功率:当连接激活时使用,允许设备以最高的速率传输数据。 2、低功耗:在完全状态下使用大约50%的电池电量的中间状态。 3、待机:没有网络连接活动或需要的最小能量状态虽然低电平和空闲状态会大大减少电池电量,但它们也会对网络请求造成很大原创 2017-08-28 17:53:56 · 658 阅读 · 0 评论 -
Android多屏幕适配及自适应解决方案
由于android屏幕尺寸大小种类很多,密度像素也有不同,从小型手机到大型电视机,因此,若想给更多的用户良好的体验,应用程序设计为与所有屏幕尺寸兼容。一、支持不同的屏幕尺寸使用灵活布局后,还应提供几种替代布局来定位不同的屏幕配置,如使用配置限定符,根据当前设备的配置自动选择适当的资源。例如:给大屏幕展示两页,手机屏幕显示一页。 文件夹别名或布局文件同名。 使用可扩展的位图.9.png,可在and原创 2017-08-29 18:05:42 · 5505 阅读 · 1 评论 -
android改进布局性能
对于android应用程序的用户体验来说,布局的影响是很直接很关键的一部分,不合理的布局可能导致内存饥饿,和反应不灵敏,改进布局性能,可以降低内存占用使界面更平滑。一、优化布局结构使用嵌套实例LinearLayout可能会导致比较深层次的嵌套,嵌套LinearLayout使用该layout_weight参数的几个实例每个子元素需要测量两次,当用于ListView中时布局被重复地膨胀。Android原创 2017-08-30 18:20:33 · 435 阅读 · 0 评论 -
andorid跳过系统API获取以太网IP,网关,DNS,MAC的方法
最近在android平台上构建出windows的效果,之前通过EthernetManager和EthernetDevInfo获取以太网相关信息,但为了边敲代码边运行,想要跳过系统层的api调用,方法如下:获取DNS:private String getLocalDNS(){ Process cmdProcess = null; Buffere...原创 2018-04-17 18:37:51 · 2379 阅读 · 3 评论 -
android中通过java的反射机制获取U盘名称
在android项目中实现Windos一样的U盘效果,需监听两个U盘的插入和拔出状态,并屏蔽本地存储,使用U盘来下载和上传文件; 在编辑代码中碰到一个问题:无法获取插入U盘的名称,于是通过java的反射机制来调用源码的API获取,方法如下: private void checkUdisk(){ //udisk_insert = false; Cla...原创 2018-05-07 15:37:08 · 2505 阅读 · 6 评论 -
Android系统Setting默认参数修改
在定制系统中,通常需要修改Settings默认设置来达到需求的目的。而Settings相关数据库操作的包位于framework/base/packages/SetingsProvider 修改Settings数据库的默认值(准确点说是第一次开机后的值) ,对应的是SettingsProvider,他的数据自定义SqlDatabaserHepler是 DataBaseHelper 默认字段的添加...原创 2018-06-29 11:39:33 · 5937 阅读 · 0 评论 -
Android5.1 内置第三方APK及Android.mk文件编写(以在amlogic5.1公版系统内置百度输入法为例)
Android.mk文件用来向编译系统描述如何编译你的源代码。在编译整个工程的情况下,系统所找到的所有的Android.mk将会先存入subdir_makefiles变量中,随后一次性一次性include进整个编译文件中。示例 Android.mk内容:LOCAL_PATH := $(my-dir)include $(CLEAR_VARS)LOCAL_MODULE := baidush...原创 2018-07-02 14:50:43 · 1608 阅读 · 0 评论 -
浅谈一种Android客户端架构设计
技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简单地说哪种架构更好,因为脱离业务谈架构是没有任何意义的,适合业务的才是好架构。而架构也不是一成不变的,随着业务的发展,也许当初设计的架构已不足以支撑目前的业务,那么就需要改变之前的架构。接下来将分享下我们Android客户端的架构设计,在App的某个业务发展阶段或许有一些参考意义。分层化与模块化分层化与模块化...转载 2018-07-12 10:05:41 · 2859 阅读 · 0 评论 -
Amligic系统本地升级方法
通过参考amligic的Settings源码,将本地升级的方法提到自己的应用中使用,代码如下:import com.amlogic.update.OtaUpgradeUtils;private OtaUpgradeUtils mUpdateUtils;mUpdateUtils=new OtaUpgradeUtils(this);new Thread(new Runnable() {...原创 2019-03-05 16:14:20 · 788 阅读 · 0 评论 -
android中两种静态获取敏感权限的方式
1.通过系统签名获取权限定制系统中,可以通过源码的签名文件对应用进行签名,在应用的AndroidManifest.xml中配置好参数,如图<manifest xmlns:android="http://schemas.android.com/apk/res/android" coreApp="true" package="com.xxx.xxx" android:...原创 2019-03-04 14:47:51 · 2605 阅读 · 0 评论 -
SecureCrt的自动化指令脚本及自主编写脚本
引言最近调试设备的wifi驱动,测试吞吐量时,需要不断的重复的输入指令,并查看相关的打印信息,测试时间较长,为了节省时间和力气,利用SecureCrt的录制功能加上简单修改,实现自动化输入功能,各位可以利用这个功能结合自己的实际情况录制编或写脚本,提高工作效率。SecureCrt的脚本生成1、录制脚本SecureCrt有录制脚本的功能,录制完成后只需根据自己的实际情况略加修改和调整,十分方...原创 2019-05-05 16:16:29 · 28933 阅读 · 2 评论 -
简化代码和Kotlin的特性-Kotlin在Android中的使用(二)
文章目录一、使用Kotlin来简化findViewById代码二、Kotlin特性1.不需要“;”结尾2.“:”的使用3.没有“new”关键字4.变量,常量定义,类型推断5.空指针安全6.函数定义7.类检测及自动转换8.in、区间和集合9.用when取代了switch10.单例模式11.类的结构12.构造函数13.模块初始化三、总结一、使用Kotlin来简化findViewById代码在And...原创 2019-06-20 16:18:29 · 576 阅读 · 0 评论 -
Kotlin与java的互操作-Kotlin在Android中的使用(三)
文章目录一、Java调用Kotlin1.对象2.实例字段3.静态字段4.静态方法5.可见性6.生成重载7.受检异常8.空安全性二、Kotlin调用Java1.Getter 和 Setter2.返回 void 的方法3.将 Kotlin 中是关键字的 Java 标识符进行转义4.空安全与平台类型5.注解类型参数6.已映射类型7.Kotlin 中的 Java 泛型8.Java 数组9.Java 可变参...原创 2019-06-21 17:45:50 · 4607 阅读 · 0 评论 -
Kotlin开发环境的配置-Kotlin在Android中的使用(一)
Kotlin AndroidStudio环境搭建插件安装创建项目总结插件安装Androidstudio3.0以上默认是支持Kotlin的使用的,但目前稳定且使用较多的版本是2.2到2.3,没有Kotlin的默认支持,需要安装Kotlin插件来解决。在Settings的Plugins中检索Kotlin并下载安装,如果安装失败则关闭多尝试几次,如图创建项目在AndroidStudio3....原创 2019-06-18 16:30:42 · 1167 阅读 · 0 评论 -
更换电脑后 androidstudio 出现Gradle's dependency cache may be corrupt解决方法
更换电脑后,用svn下载以前的一个项目,导入出现Gradle's dependency cache may be corrupt的配置错误。 在网上看了一些帖子,最后这种情况下解决方法如下: 修改gradle-wrapper.properties的gradle的版本,与当前gradle版本一致就可以了,可以在自己建的项目里面取对照 文件在目录原创 2017-02-22 14:06:18 · 530 阅读 · 0 评论