自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呆屁的博客

记录自己的编程经历

  • 博客(47)
  • 收藏
  • 关注

原创 AndroidStudio搞怪进度条插件

分享一个彩虹猫进度条插件,为工作增添乐趣,哈哈

2021-12-11 18:08:12 2658

原创 Kotlin之数据流Flow-Kotlin在Android中的使用(六)

简介Google官方描述:Flow是基于协程构建的数据流,数据流是可通过异步方式进行计算处理的一组数据序列。所发出值的类型必须相同。例如Flow 是发出整数值的数据流。数据流与生成一组序列值的 Iterator 非常相似,但它使用挂起函数通过异步方式生成和使用值。这就是说,例如,数据流可安全地发出网络请求以生成下一个值,而不会阻塞主线程。数据流包含三个实体:提供方会生成添加到数据流中的数据。得益于协程,数据流还可以异步生成数据。(可选)中介可以修改发送到数据流的值,或修正数据流本身使用方则使

2021-11-15 10:49:21 1232

原创 Kotlin的协程使用小结-Kotlin在Android中的使用(五)

简介在项目中使用一段时间协程后,确实能体会到协程对于异步回调的简化,让我觉得最方便的是,作为调用方时无需关心应该使用哪个线程来执行函数,通常写函数时可以规定好线程。协程是Google官方推荐的Android异步编程解决方案,具有轻量,内存泄漏更少,内置取消支持,Jetpack集成等特点在网上收集了一些对于协程的...

2021-11-11 16:39:36 3077

原创 网络协议与TCP连接原理(学习笔记七)

一、 计算机网络背景和定义随着计算机技术发展,计算机的体积和价格都在下降,之前计算机多用于研究机构,现阶段逐步进入一般的公司用于办公。原来计算机之间传输数据需要通过软盘等第三方存储介质进行转存,人们需要将数据直接通过通信线路传输,来缩短传输时间,于是计算机网络开始诞生,并逐渐发展为现在巨大的Internet。定义和分类计算机网络的标准定义是:利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。计算机网络从覆盖范围

2021-01-05 14:26:57 644

原创 插件化实现原理(学习笔记六)

介绍:插件化本质上来说是运行没有安装的apk,支持插件的app一般称为宿主。宿主提供上下文环境通常作为主APP在运行时加载和运行插件,这样便可将app中一些不常用的功能模块做成插件,一方面可以减少安装包的大小,另一方面可以实现APP功能的动态扩展优势:让用户不用重新安装 APK 就能升级应用功能,减少发版本频率,增加用户体验。提供一种快速修复线上 BUG 和更新的能力。按需加载不同的模块,实现灵活的功能配置,减少服务器对旧版本接口兼容压力。模块化、解耦合、并行开发、 65535 问题。实现原理:在

2020-12-23 18:32:55 521 2

原创 Android性能优化之网络优化

流程优化前先描述一下一条正常网络请求的流程:DNS 解析,请求DNS服务器,获取域名对应的IP地址;与服务器建立连接,包括 TCP三次握手,安全协议同步流程;连接建立完成,发送和接收数据,解码数据;在了解了网络请求的流程后,针对上面这三步流程分别进行优化:一、DNS优化在 Android APP 访问网络的时候,第一步就是 DNS 解析,默认使用运行商的 LocalDNS 服务,DNS 完整的解析流程很长,会先从本地系统缓存取,若没有就到最近的 DNS 服务器取,若没有再到主域名服 务器取

2020-11-04 19:37:08 1844

原创 Android性能优化之容器使用

一款Android应用除了具备实现好用的功能和清晰明了的交互之外,对性能也应该有极致的追求,对每一个点做好优化,积少成多最终做出高性能的APP,能极大的增强用户的体验优化的目标从优化的目的来看,可分为以下三个:1.更快:更快指的是应用的流畅性,可从以下几点来提升APP的流畅性启动速度页面显示的速度响应的速度2.更稳定:更稳定指的是减少APP的异常情况避免出现APP崩溃(Crash)避免出现APP无响应(ANR)3.更节省:更节省指的是对资源的节省,可分为以下几点内存大小:应尽

2020-11-02 17:54:43 414

原创 Android定制系统的架构设计思路

前言:文章根据现阶段自身实际工作经验,总结一套Android的系统架构流程,以梳理从业以来对这部分技术的理解。因为接触的系统定制化都是大屏商显和TV盒子,是基于芯片厂商提供的源码开发,所以本文章是从这方面角度去看待架构设计,若以后能接触到更多的系统定制化内容,再梳理更新文章。从分层角度看系统结构下图是Android的系统分层图:定制系统开发就是源码级开发:基于AOSP(Android Open Source Project)环境的开发工作。主要开发场景为Android系统定制,比如手机设备的MIU

2020-09-09 11:27:57 1126 2

原创 理解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 459 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 180

原创 AQS原理和队列锁机制(学习笔记三)

AQS的理解AQS是队列同步器AbstractQueuedSynchronizer的简称,它是用来构建锁或其他同步组件的基础框架,内部有一个int型变量state来表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。使用和设计模式AQS主要通过继承并实现它的抽象方法来管理同步状态,推荐使用自定义同步组件的静态内部类来继承,可以使用AQS提供的三个能保证状态安全的方法来进行操作getState、setState(int)、compareAndSetState(int expect,int

2020-08-01 11:26:41 436

原创 理解阻塞队列和线程池原理(学习笔记二)

阻塞队列队列介绍队列是一种先进先出的线性表结构,它的插入操作端为队尾,删除操作端为队头,在队列中插入一个元素称为入队,删除一个元素是出队。阻塞队列介绍支持阻塞插入方法:当队列满时,会阻塞向队列插入元素的线程,直到有元素出队支持阻塞移除方法:当队列为空时,获取元素的线程会等待队列变为非空阻塞队列常用于生产者消费者模式的场景,为了解决生产者和消费者处理效率不平衡的问题,通过阻塞队列来为生产者和消费者解耦,两者不直接通信,而是通过阻塞队列通信,生产者是向阻塞队列添加元素的线程,消费者是从阻塞队列拿元素

2020-07-31 19:45:21 775

原创 深入理解java中的线程并发(学习笔记一)

线程的状态在java中线程的启动方式只有两种:Thread.start创建一个Runnable任务交给Thread运行线程的状态分为6种:初始状态:新创建了一个Thread,但还没有start运行状态:在java中ready和running两种状态都称为运行阻塞:表示线程阻塞于锁等待:等待其他线程做出一些特定动作(中断,通知)超时等待:与等待不同,在指定时间自行返回终止:表示执行完毕死锁发生死锁,有四个必要条件:互斥:进程对所分配的资源进行排他性使用,其他进程申请该资

2020-07-30 21:38:25 305

原创 Kotlin的高阶函数详解-Kotlin在Adnroid中的使用(四)

Kotlin的高阶函数详解和使用高阶函数的定义如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。与java不同的是,在Kotlin中增加了一个函数类型的概念,如果我们将这种函数添加到一个函数的参数声明或返回值声明当中,那么这就是一个高阶函数了。函数类型语法基本规则:`(String,Int) -> Unit`添加到某个函数的参数声明

2020-07-05 19:19:48 816

原创 MTK平台编译使用到的Android overlay机制(frameworks资源文件修改无效的问题)

现象在mtk平台修改SystemUI的时候,出现了修改资源文件不生效的情况,但代码修改是生效的,很确定指向的资源文件是对的,之前在amlogic平台修改fragment资源内容并未碰到过这种情况,查阅资料后才知道mtk平台的客制化内容对部分资源文件进行了覆盖重写。资源替换机制overlay覆盖重写的资源文件在overlay文件夹下,可以通过grep命令在device目录下查找,因为可能不止一套overlay文件,真正使用的资源文件有可能在对应芯片型号的文件夹,也可能在google文件夹下,与lunch

2020-07-04 15:45:31 1684

原创 优化AndroidStudio内存配置(解决AS看源码卡顿问题)

我习惯使用AS来查看整个android源码,过滤时只把需要改动的工程打开,这样既可以查看全部源码,又能修改自己的工程或模块,十分方便,但我发现这样运行一段时间(十分钟左右)后,整个AS运行内存不足,卡顿到不能操作,影响效率现在电脑的配置都不会很低,一般都是8G内存+i5以上cpu,但AndroidStudio在运行代码庞大的项目或者直接看源码的时候还是会内存不足,卡到无法呼吸。原因:AS限制了Java虚拟机启动的内存大小,限制了最大堆内存,当AS运行越久,内存越不足的时候,就会频繁的触发GC,导致AS

2020-06-24 17:46:15 2006 1

原创 PMP中工具与技术归类

数据收集头脑风暴:短时间内获得大量创意;需要引导者引导;用来生产和收集对项目和产品需求多种创意的技术;用于识别相关方的需求焦点小组:召集预定相关方和主题专家进行互动式讨论;用来收集同一领域相关方的需求访谈:与相关方直接交谈获取信息;有助于识别和定义所需产品可交付成果的特征和功能;可用于获取机密信息应在信任和保密的环境下开展访谈,以获取真实可信,不带偏见的反馈核对单:指导制定计划或检查是否...

2020-06-20 16:39:55 1306

原创 删除原生Setting中无用的功能(移除Preference)

删除原生Setting中无用的功能(删除Preference)原生Setting的界面是使用Preference而不是View来创建的,同时需要特殊的Activity或者Fragment的子类来显示: 如:PreferenceFragment和PreferenceActivity原生的Setting应用所包含的功能比较全面,但通常开发中总是遇到需要裁剪和定制原生应用的需求,定制需求各有不同,刚接触这类需求时,可能第一时间想到的是屏蔽UI,但在Preference没有类似View那样好用的隐藏方法,这里介

2020-06-20 16:33:37 1055

原创 PMP中挣值管理的概念和计算公式

挣值管理挣值管理是用来综合考察项目范围、进度和成本绩效的方法,是项目整合管理的要求。虽然它直接测量的只是进度和成本绩效,但《PMBOK® 指南》中也提到了范围。可以说,挣值管理是一种把范围、进度和成本绩效整合起来考察的方法,就是要在既定的范围之下追求进度和成本绩效的综合最优。它可以避免单独测量进度或成本绩效的弊端。挣值管理可以在整个项目、控制账户或工作包层面上进行。这三个层面的挣值管理,原理完...

2020-02-24 17:17:10 3724 4

原创 在Android设备上使用极光推送id重复的原因分析和解决办法

引言在使用极光推送时,用于区分推送设备最重要的就是RegistrationID,如果出现相同的ID推送就会出问题原因分析RegistrationID是由设备的IMEI 、 serial_number 、deviceID三个参数决定的,出现相同的RegistrationID首先应该检查这三个参数是否为空,或出现值相同的情况。后台存储 uid 的方式是根据 appkey_dvcid->u...

2019-12-23 14:12:12 1457

原创 在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 416

原创 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 998 8

原创 Android中使用定制系统的签名文件给应用签名

在开发中,有些应用的代码不参与系统编译,而是在IDE工具中编译,然后apk参与系统编译并被签名(需要系统签名权限),在调试中时常需要替换系统中编译出来的apk,签名不同会导致安装失败。1.在程序代码中添加系统权限androidManifest.xml中添加 android:sharedUserId="android.uid.system" <manifest xmlns:andr...

2019-07-19 15:54:56 1891 4

原创 解决ListView因返回、点击、刷新UI等出现高度变化的问题

在Android开发中,有时因切换分辨率,点击,或界面切换会导致ListView的子元素出现高度变化的现象,如果在加载时将高度固定,可以避免这种情况发生:在Adapter中的getView()方法中添加如下代码,可解决高度变化的问题:@Overridepublic View getView(int position, View view, ViewGroup viewGroup) { Li...

2019-07-05 15:09:18 494

原创 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 4539

原创 简化代码和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 455

原创 Kotlin开发环境的配置-Kotlin在Android中的使用(一)

Kotlin AndroidStudio环境搭建插件安装创建项目总结插件安装Androidstudio3.0以上默认是支持Kotlin的使用的,但目前稳定且使用较多的版本是2.2到2.3,没有Kotlin的默认支持,需要安装Kotlin插件来解决。在Settings的Plugins中检索Kotlin并下载安装,如果安装失败则关闭多尝试几次,如图创建项目在AndroidStudio3....

2019-06-18 16:30:42 1077

原创 SecureCrt的自动化指令脚本及自主编写脚本

引言最近调试设备的wifi驱动,测试吞吐量时,需要不断的重复的输入指令,并查看相关的打印信息,测试时间较长,为了节省时间和力气,利用SecureCrt的录制功能加上简单修改,实现自动化输入功能,各位可以利用这个功能结合自己的实际情况录制编或写脚本,提高工作效率。SecureCrt的脚本生成1、录制脚本SecureCrt有录制脚本的功能,录制完成后只需根据自己的实际情况略加修改和调整,十分方...

2019-05-05 16:16:29 26216 2

原创 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 735

原创 android中两种静态获取敏感权限的方式

1.通过系统签名获取权限定制系统中,可以通过源码的签名文件对应用进行签名,在应用的AndroidManifest.xml中配置好参数,如图&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" coreApp="true" package="com.xxx.xxx" android:...

2019-03-04 14:47:51 2489

转载 浅谈一种Android客户端架构设计

技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简单地说哪种架构更好,因为脱离业务谈架构是没有任何意义的,适合业务的才是好架构。而架构也不是一成不变的,随着业务的发展,也许当初设计的架构已不足以支撑目前的业务,那么就需要改变之前的架构。接下来将分享下我们Android客户端的架构设计,在App的某个业务发展阶段或许有一些参考意义。分层化与模块化分层化与模块化...

2018-07-12 10:05:41 2823

原创 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 1519

原创 Android系统Setting默认参数修改

在定制系统中,通常需要修改Settings默认设置来达到需求的目的。而Settings相关数据库操作的包位于framework/base/packages/SetingsProvider 修改Settings数据库的默认值(准确点说是第一次开机后的值) ,对应的是SettingsProvider,他的数据自定义SqlDatabaserHepler是 DataBaseHelper 默认字段的添加...

2018-06-29 11:39:33 5804

原创 android中通过java的反射机制获取U盘名称

在android项目中实现Windos一样的U盘效果,需监听两个U盘的插入和拔出状态,并屏蔽本地存储,使用U盘来下载和上传文件; 在编辑代码中碰到一个问题:无法获取插入U盘的名称,于是通过java的反射机制来调用源码的API获取,方法如下: private void checkUdisk(){ //udisk_insert = false; Cla...

2018-05-07 15:37:08 2397 6

原创 andorid跳过系统API获取以太网IP,网关,DNS,MAC的方法

最近在android平台上构建出windows的效果,之前通过EthernetManager和EthernetDevInfo获取以太网相关信息,但为了边敲代码边运行,想要跳过系统层的api调用,方法如下:获取DNS:private String getLocalDNS(){ Process cmdProcess = null; Buffere...

2018-04-17 18:37:51 2304 3

原创 android改进布局性能

对于android应用程序的用户体验来说,布局的影响是很直接很关键的一部分,不合理的布局可能导致内存饥饿,和反应不灵敏,改进布局性能,可以降低内存占用使界面更平滑。一、优化布局结构使用嵌套实例LinearLayout可能会导致比较深层次的嵌套,嵌套LinearLayout使用该layout_weight参数的几个实例每个子元素需要测量两次,当用于ListView中时布局被重复地膨胀。Android

2017-08-30 18:20:33 410

原创 Android多屏幕适配及自适应解决方案

由于android屏幕尺寸大小种类很多,密度像素也有不同,从小型手机到大型电视机,因此,若想给更多的用户良好的体验,应用程序设计为与所有屏幕尺寸兼容。一、支持不同的屏幕尺寸使用灵活布局后,还应提供几种替代布局来定位不同的屏幕配置,如使用配置限定符,根据当前设备的配置自动选择适当的资源。例如:给大屏幕展示两页,手机屏幕显示一页。 文件夹别名或布局文件同名。 使用可扩展的位图.9.png,可在and

2017-08-29 18:05:42 5376 1

原创 如何高效优化Android网络连接以降低电耗

在开发android应用时应最大限度地减少下载和网络连接的电池寿命影响。一、高效的连接优化下载 应用的影响: 无线电的状态机由三种能量状态组成: 1、全功率:当连接激活时使用,允许设备以最高的速率传输数据。 2、低功耗:在完全状态下使用大约50%的电池电量的中间状态。 3、待机:没有网络连接活动或需要的最小能量状态虽然低电平和空闲状态会大大减少电池电量,但它们也会对网络请求造成很大

2017-08-28 17:53:56 601

原创 Android中自动上下滚动的TextView

Android中自动上下滚动的TextView最近在做弹幕组件,其中有许多中动画和样式,其中一种是文字内容滚动,左右滚动很简单,设置好宽度,在onDraw中画出来就行了,这里介绍一下上下滚动的文本AutoTextView:public class AutoTextView extends TextSwitcher implements ViewSwitcher.ViewFactory

2017-06-20 17:39:02 2854

原创 Android获取mac地址方法,6.0以上也可用

Android获取mac地址方法,6.0以上也可用许多Android设备的应用获取服务器资源时,需要先将本机的mac地址在服务器端注册,如电视机盒子,手机的部分应用,这里记录一下开发中自己使用的获取mac地址的方法。 /** * 获取手机的MAC地址 * @return String */ public String getMac(){ Stri

2017-06-13 13:43:50 1345

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除