自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 Flutter barcode_scanner2 使用

Flutter barcode_scanner2 使用barcode_scanner2 是一个基于flutter平台的第三方扫码库,其前身barcode_scanner 已不再更新。其实现了二维码、条形码识别功能,以及调用的相机相关功能(如闪光灯等)。其实现了自动获取运行时权限功能。导入首先,在项目的android工程中,在其AndroidManifest.xml中添加相机权限<uses-permission android:name="android.permission.CAMERA" /

2022-05-12 14:53:44 1343 1

原创 SharedPreferences 源码及原理

SharedPreferences 源码及原理SharedPreferences 是Android中提供的一种轻量级数据存储方式,用来以键值对方式保存简单的数据类型。创建流程Android开发者通过Context的方法context.getSharedPreferences(String, Int)来获取SharedPreferences实例。Context中的具体实现如下 @Override public SharedPreferences getSharedPreferences(

2022-04-20 10:52:20 564

原创 LruCache源码及常用方法原理

LruCache源码及常用方法原理特点基于LinkedHashMap保存内容和实现排序当缓存无空间,会将最少使用的元素移除线程安全常用方法原理LruCache维护了一个LinkedHashMap用来保存元素,除此之外还有一些用来记录状态、长度等的成员变量 @UnsupportedAppUsage private final LinkedHashMap<K, V> map; /** Size of this cache in units. Not nece

2022-04-19 10:39:41 127

原创 LinkedList源码及常用方法原理

LinkedList源码及常用方法原理特点双链表结构适合用来在频繁添加和删除元素的操作查找和修改的效率较低常用方法原理源码中维护了size、first、last三个参数,分别用来保存当前数组长度、数组第一项和数组最后一项。其中后两者是Node<E>类的实例 private static class Node<E> { E item; Node<E> next; Node<E> prev;

2022-04-18 12:35:01 76

原创 ArrayList源码及常用方法原理

ArrayList源码及常用方法原理特点数组长度动态增长非线程安全实现了Serializable接口实现了RandomAccess,支持快速随机方问实现了Cloneable接口常用方法原理根据源码中定义的两个私有属性可知,ArrayList使用elementData来保存数组内容,用一个int类型的变量size保存当前数组长度。构造器 /** * Constructs an empty list with the specified initial capacity.

2022-04-16 12:31:55 2490

原创 【Android笔记】异步加载View,AsyncLayoutInflater原理

异步加载View,AsyncLayoutInflater原理AsyncLayoutInflater是谷歌提供的一个异步加载UI方案,其可以异步加载控件并回调给UI,以此减少主线程消耗。使用在应用的build.gradle中添加如下依赖...dependencies { ... implementation 'androidx.asynclayoutinflater:asynclayoutinflater:1.0.0'}依赖后,可以在任何能获取context的场景调用如下方法进

2022-04-14 11:39:42 4373

原创 【Android源码】ApplicationContext 创建流程

ApplicationContext 创建流程当用用程序启动后,应用程序内就有一个ApplicationContext对象。其通过LoadedApk.java的makeApplication()创建。根据启动app的是Service或Activity两种情况,进入makeApplication()的入口有所不同如,通过启动Activity触发Application创建,AMS服务调用方法scheduleLaunchActivity(),代码如下 // we use token to id

2022-04-06 10:29:44 631

原创 2020-11-17 随笔

2020-11-17 随笔今天逛技术博客,看到郭霖获得了谷歌开发专家的称号。GDE,这应该算是一个Android开发者很高的荣誉了。说实话,我很羡慕。今年过的很奇怪,应该不止我一人有这种感觉。2020年对很多人来说都是转折的一年。在这一年最后的两个月,我也终于有希望让月薪提升到15000的水平。贷款有望还清,生活有了很明显的希望。但这依旧不是最好的日子。我是看着郭霖的书入门的Android开发。如今12多年工作经验的他获得了GDE称号,8年后的我,能否具备获得这个称号的资格呢?我不知道。我目前的能力,可能

2020-11-17 11:47:36 112

原创 Android组件化学习笔记

Android组件化学习笔记学习过程产生的示例代码已开源组件化意义解耦,增加可维护性提高代码利用率多人开发时防止代码胡乱修改组件即可同时编译打包,又可以作为App单独编译打包,提高调试效率实现记录模块项目应分解为多个模块,其中包含以下内容项目的App外壳各个组件的代码各个组件公用的代码单独组成模块例如在实例代码中,我的项目模块如下app:项目外壳commonLib:公共代码,如基类、工具类module0:模块0module1:模块1module2:模块2模块

2020-11-13 17:07:05 81

原创 狐彻设计模式学习笔记(二)—— Builder模式

设计模式(二)—— Builder模式基于《Android 源码设计模式 解析与实战》第二版(何红辉 关爱民 著)的学习笔记定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示使用场景通过相同方法,不同执行顺序产生不同结果时使用多个部件或零件,都可装配到一个对象中,但产生的运行结果不同时产品类非常复杂,或产品类中的调用顺序不同产生不同作用初始化一个复杂对象,如参数多,且很多参数有默认值时角色Builder —— 抽象Builder类,规范产品的组建,一般

2020-10-20 21:37:25 121

原创 狐彻设计模式学习笔记(一)—— 单例模式(Singleton)

设计模式(一)—— 单例模式(Singleton)基于《Android 源码设计模式 解析与实战》第二版(何红辉 关爱民 著)的学习笔记定义确保某一类只有一个实例,且自行实例化并向整个系统提供这个实例使用场景需确保某个类有且只有一个对象的场景需避免产生多个对象消耗过多资源某类型对象应有且只有一个实例如创建一个对象需要消耗的资源过多(IO、网络交互、数据库)角色Client —— 高层客户端Singleton —— 单例类特点构造函数不对外开放,一般为private通

2020-10-20 21:36:42 89

原创 狐彻面向对象六大原则学习笔记

面向对象六大原则基于《Android 源码设计模式 解析与实战》第二版(何红辉 关爱民 著)的学习笔记三大特点:继承、封装、多态1 - 5 为面向对象的五大基本原则1. 单一职责原则英文名:Single Responsibility Principle定义:就一个类而言应该仅有一个引起它变化的原因。单一职责所表达出的用意就是“单一”二字完全不一样的功能就不应该放在一个类中一个类中应该是一组相关性很高的函数、数据的封装1.2 开闭原则(OCP)英文名:Open Close Pri

2020-10-20 21:35:56 102

原创 隐式跳转遇到的坑

这里写自定义目录标题隐式跳转遇到的坑问题描述问题分析问题解决隐式跳转遇到的坑问题描述有这样一个需求页面A中根据操作获得到一个值a,把a作为参数传入列表页面B并获取列表数据。点击列表进入相册页面C,并在该页面通过跨应用(系统相机、相册)添加图片。实现时,我把a存入一个静态类,并在B中通过这个静态类获取该变量(别问为啥),在每次返回A页面时将a置空(onResume)。当在C中进行两侧跨应用跳转(比如调用系统相机)后,程序崩溃了然后我也崩溃了,因为日志里说是a在B页面中报空指针了。而此时B页面甚至不

2020-10-19 19:55:36 189

原创 SpannableStringBuilder 笔记

SpannableStringBuilder 笔记在学习富文本的过程中发现了这个知识点。SpannableStringBuilder实现了CharSequence接口,用法类似StringBuilder。可以为其包含的字符串设置样式。在设计自定义Label时会很实用。需要注意的是,虽然其可以直接作为参数放入TextView中,不过由于Canvas并不适配这个类,所以在其中使用这个类等同于使用普通的字符串。关键方法void setSpan(Object what, int start, int e

2020-06-30 15:45:13 493

原创 Bugly 的日志收集、更新和热更新

Bugly 的日志收集、更新和热更新Bugly 是一款由腾讯开发的app管理平台,集成了日志上报、app版本管理和热更新修复等功能。其基于微信Tinker的开源方案,开发者只需要集成进他们提供的SDK即可实现用户无感知的修复等功能。日志集成导入SDKBugly可以在应用内上报异常信息,推荐使用自动集成来进行SDK 的集成首先,配置app.gradle文件的依赖信息android { defaultConfig { ndk { // 设置支持的SO库

2020-06-15 08:55:39 552

原创 Bugly多渠道热更新笔记

Bugly多渠道热更新热更新Bugly提供基于Tinker的热更新服务,开发者只需提供基于线上连接的“基线包”打包的补丁包即可实现热更新和更新情况追踪。导入添加依赖首先在project.gradle里配置打包插件buildscript { repositories { jcenter() } dependencies { // tinkersupport插件, 其中lastest.release指拉取最新版本,也可以指定明确版本号,例如1

2020-06-15 08:52:55 327

原创 线程池的基本使用笔记

线程池的使用首先当然要先说线程池的优点。重用线程池中的线程,避免因线程的创建和销毁带来性能开销。能有效控制线程池最大并发数,避免大量线程因互相抢占系统资源而阻塞对线程进行简单管理,并提供定时执行以及制定间隔循环执行能力ThreadPoolExecutor构造方法ThreadPoolExcutor是线程池的实现,其实现了ExecutorService接口,并在构造方法中设置了各种参数public ThreadPoolExecutor(int corePoolSize,

2020-06-15 08:48:22 113

原创 通过PackageManager开启任意应用

通过PackageManager开启任意应用已知包名、启动Activity名: Intent intent = new Intent(); String packageName = "org.zjphis.wsjd"; String clsName = packageName + ".LoginActivity"; ComponentName component = new ComponentName(packageName, clsName

2020-06-15 08:46:16 344

原创 Kotlin 协程学习笔记

Kotlin 协程笔记简介协程是一种类似轻量级线程的东西。在官方示例中,甚至可以同时开启十万个协程进行工作,其轻量性可见一斑。kotlinx.coroutines是由 Jetbrains 开发的携程库,本身还改了很多协程的高级语言。也是本文的主角Android 中使用在app.build.gradle中添加依赖implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0'即可在项目中使用该库基本用法直接上代码

2020-06-15 08:38:36 132

原创 FoxFrame框架说明

FoxFrame 框架说明概述Github地址FoxFrame 是一个为方便中小型项目开发而遍写的一个开发框架。封装了RxJava、Retrofit和一些工具方法。同时为MVP框架的搭建提供便利。由于算是学习过程中的积累产物,一不小心就写了不少东西,导致很多工具类没有很好的介绍,甚至根本没有介绍。我是不会承认因为自己懒得写,所以如果有兴趣可以看看源码,若发现问题相当欢迎练习作者进行指正。希望我早日成为Android大佬,日薪过万QQ:864706521快速接入在项目的 app.gradle

2020-06-08 11:23:07 631

原创 Android Intent常用常量

Android Intent常用常量标黄为常用常量常规ACTION 常量常量值说明ACTION_MAINandroid.intent.action.MAIN应用入口ACTION_VIEWandroid.intent.action.VIEW显示数据ACTION_ATTACH_DATAandroid.intent.action.ATTACH_DATA...

2020-04-28 11:23:59 361

原创 Android 11 部分变更笔记

Android 11 笔记设备存储控件在Android 11中,即使应用具有所有文件访问权限,也无法删除其它应用的缓存文件。为达到上述目的,需要以下操作1.通过调用 ACTION_MANAGE_STORAGEintent 操作检查可用控件。2.若设备可用控件不足,需提示用户同意应用清除所有缓存。达此目的应调用ACTION_CLEAR_APP_CACHEintent 操作ACTION_CL...

2020-04-24 16:52:55 3208 1

原创 AIDL 跨进程通讯简单应用

AIDL 跨进程通讯简单应用关于多进程在Android中,每一个应用都是一个独立的进程。有时候部分模块处于特殊需求,也需要在独立的进程中运行。同时多进程可以增加应用的可用内存空间(分配给单独进程的空间不变)Android中常用的进程间通讯(IPC)有以下几种AIDLMessengerBundleContentProviderBroadcastReceiver文件共享Socke...

2019-12-31 12:06:55 111

原创 Android P ImageDecoder 封装工具类

Android P ImageDecoder 封装工具类翻阅安卓版本信息时,发现在Android P中新增了一个用于替代BitmapFactory的类ImageDecoder类,稍微研究了一下,感觉很有趣,便尝试着写了个工具类出来丰富我的个人开发框架基本用法// 测试方法 javavoid test(File file){ ImageDecoder.Source source = ...

2019-12-27 17:55:49 879 5

原创 Android Room 基本应用笔记

Android Room 笔记导入在app.build.gradle中的dependecies{}代码块内添加如下引用 def room_version = "2.2.3" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-...

2019-12-27 15:27:51 119

原创 Android Preference 保存应用设置

Preference 保存应用设置个性化是Android的一大特点,根据用户习惯不同app应提供修改设置的页面。因此app需要面对大量需要持久化的变量。引入 Preference 库来实现这一需求导入原有的Preference包已被弃用,建议使用AndroidX下的Preference在app.build.gradle中添加以下依赖dependencies { // ... ...

2019-12-27 15:27:04 2982

原创 画中画模式笔记

画中画模式实现可以通过hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)判断系统是否支持画中画模式系统默认情况下不会为应用提供画中画支持。通过在Manifest.xml文件中为activity标签添加android:supportsPictureInPicture和android:resizeableActivity为 tr...

2019-12-27 15:24:15 553 1

空空如也

空空如也

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

TA关注的人

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