![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android笔记
文章平均质量分 62
狐彻狐
狐族万岁
落魄的安卓开发程序员
展开
-
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 · 1404 阅读 · 1 评论 -
SharedPreferences 源码及原理
SharedPreferences 源码及原理SharedPreferences 是Android中提供的一种轻量级数据存储方式,用来以键值对方式保存简单的数据类型。创建流程Android开发者通过Context的方法context.getSharedPreferences(String, Int)来获取SharedPreferences实例。Context中的具体实现如下 @Override public SharedPreferences getSharedPreferences(原创 2022-04-20 10:52:20 · 576 阅读 · 0 评论 -
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 · 136 阅读 · 0 评论 -
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 · 85 阅读 · 0 评论 -
ArrayList源码及常用方法原理
ArrayList源码及常用方法原理特点数组长度动态增长非线程安全实现了Serializable接口实现了RandomAccess,支持快速随机方问实现了Cloneable接口常用方法原理根据源码中定义的两个私有属性可知,ArrayList使用elementData来保存数组内容,用一个int类型的变量size保存当前数组长度。构造器 /** * Constructs an empty list with the specified initial capacity.原创 2022-04-16 12:31:55 · 2500 阅读 · 0 评论 -
【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 · 4569 阅读 · 0 评论 -
【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 · 646 阅读 · 0 评论 -
Android组件化学习笔记
Android组件化学习笔记学习过程产生的示例代码已开源组件化意义解耦,增加可维护性提高代码利用率多人开发时防止代码胡乱修改组件即可同时编译打包,又可以作为App单独编译打包,提高调试效率实现记录模块项目应分解为多个模块,其中包含以下内容项目的App外壳各个组件的代码各个组件公用的代码单独组成模块例如在实例代码中,我的项目模块如下app:项目外壳commonLib:公共代码,如基类、工具类module0:模块0module1:模块1module2:模块2模块原创 2020-11-13 17:07:05 · 96 阅读 · 0 评论 -
狐彻设计模式学习笔记(二)—— Builder模式
设计模式(二)—— Builder模式基于《Android 源码设计模式 解析与实战》第二版(何红辉 关爱民 著)的学习笔记定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示使用场景通过相同方法,不同执行顺序产生不同结果时使用多个部件或零件,都可装配到一个对象中,但产生的运行结果不同时产品类非常复杂,或产品类中的调用顺序不同产生不同作用初始化一个复杂对象,如参数多,且很多参数有默认值时角色Builder —— 抽象Builder类,规范产品的组建,一般原创 2020-10-20 21:37:25 · 131 阅读 · 0 评论 -
狐彻设计模式学习笔记(一)—— 单例模式(Singleton)
设计模式(一)—— 单例模式(Singleton)基于《Android 源码设计模式 解析与实战》第二版(何红辉 关爱民 著)的学习笔记定义确保某一类只有一个实例,且自行实例化并向整个系统提供这个实例使用场景需确保某个类有且只有一个对象的场景需避免产生多个对象消耗过多资源某类型对象应有且只有一个实例如创建一个对象需要消耗的资源过多(IO、网络交互、数据库)角色Client —— 高层客户端Singleton —— 单例类特点构造函数不对外开放,一般为private通原创 2020-10-20 21:36:42 · 96 阅读 · 0 评论 -
狐彻面向对象六大原则学习笔记
面向对象六大原则基于《Android 源码设计模式 解析与实战》第二版(何红辉 关爱民 著)的学习笔记三大特点:继承、封装、多态1 - 5 为面向对象的五大基本原则1. 单一职责原则英文名:Single Responsibility Principle定义:就一个类而言应该仅有一个引起它变化的原因。单一职责所表达出的用意就是“单一”二字完全不一样的功能就不应该放在一个类中一个类中应该是一组相关性很高的函数、数据的封装1.2 开闭原则(OCP)英文名:Open Close Pri原创 2020-10-20 21:35:56 · 113 阅读 · 0 评论 -
隐式跳转遇到的坑
这里写自定义目录标题隐式跳转遇到的坑问题描述问题分析问题解决隐式跳转遇到的坑问题描述有这样一个需求页面A中根据操作获得到一个值a,把a作为参数传入列表页面B并获取列表数据。点击列表进入相册页面C,并在该页面通过跨应用(系统相机、相册)添加图片。实现时,我把a存入一个静态类,并在B中通过这个静态类获取该变量(别问为啥),在每次返回A页面时将a置空(onResume)。当在C中进行两侧跨应用跳转(比如调用系统相机)后,程序崩溃了然后我也崩溃了,因为日志里说是a在B页面中报空指针了。而此时B页面甚至不原创 2020-10-19 19:55:36 · 198 阅读 · 0 评论 -
SpannableStringBuilder 笔记
SpannableStringBuilder 笔记在学习富文本的过程中发现了这个知识点。SpannableStringBuilder实现了CharSequence接口,用法类似StringBuilder。可以为其包含的字符串设置样式。在设计自定义Label时会很实用。需要注意的是,虽然其可以直接作为参数放入TextView中,不过由于Canvas并不适配这个类,所以在其中使用这个类等同于使用普通的字符串。关键方法void setSpan(Object what, int start, int e原创 2020-06-30 15:45:13 · 506 阅读 · 0 评论 -
Bugly 的日志收集、更新和热更新
Bugly 的日志收集、更新和热更新Bugly 是一款由腾讯开发的app管理平台,集成了日志上报、app版本管理和热更新修复等功能。其基于微信Tinker的开源方案,开发者只需要集成进他们提供的SDK即可实现用户无感知的修复等功能。日志集成导入SDKBugly可以在应用内上报异常信息,推荐使用自动集成来进行SDK 的集成首先,配置app.gradle文件的依赖信息android { defaultConfig { ndk { // 设置支持的SO库原创 2020-06-15 08:55:39 · 575 阅读 · 0 评论 -
Bugly多渠道热更新笔记
Bugly多渠道热更新热更新Bugly提供基于Tinker的热更新服务,开发者只需提供基于线上连接的“基线包”打包的补丁包即可实现热更新和更新情况追踪。导入添加依赖首先在project.gradle里配置打包插件buildscript { repositories { jcenter() } dependencies { // tinkersupport插件, 其中lastest.release指拉取最新版本,也可以指定明确版本号,例如1原创 2020-06-15 08:52:55 · 341 阅读 · 0 评论 -
线程池的基本使用笔记
线程池的使用首先当然要先说线程池的优点。重用线程池中的线程,避免因线程的创建和销毁带来性能开销。能有效控制线程池最大并发数,避免大量线程因互相抢占系统资源而阻塞对线程进行简单管理,并提供定时执行以及制定间隔循环执行能力ThreadPoolExecutor构造方法ThreadPoolExcutor是线程池的实现,其实现了ExecutorService接口,并在构造方法中设置了各种参数public ThreadPoolExecutor(int corePoolSize,原创 2020-06-15 08:48:22 · 127 阅读 · 0 评论 -
通过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 · 356 阅读 · 0 评论 -
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 · 143 阅读 · 0 评论 -
FoxFrame框架说明
FoxFrame 框架说明概述Github地址FoxFrame 是一个为方便中小型项目开发而遍写的一个开发框架。封装了RxJava、Retrofit和一些工具方法。同时为MVP框架的搭建提供便利。由于算是学习过程中的积累产物,一不小心就写了不少东西,导致很多工具类没有很好的介绍,甚至根本没有介绍。我是不会承认因为自己懒得写,所以如果有兴趣可以看看源码,若发现问题相当欢迎练习作者进行指正。希望我早日成为Android大佬,日薪过万QQ:864706521快速接入在项目的 app.gradle原创 2020-06-08 11:23:07 · 667 阅读 · 0 评论 -
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 · 375 阅读 · 0 评论 -
Android 11 部分变更笔记
Android 11 笔记设备存储控件在Android 11中,即使应用具有所有文件访问权限,也无法删除其它应用的缓存文件。为达到上述目的,需要以下操作1.通过调用 ACTION_MANAGE_STORAGEintent 操作检查可用控件。2.若设备可用控件不足,需提示用户同意应用清除所有缓存。达此目的应调用ACTION_CLEAR_APP_CACHEintent 操作ACTION_CL...原创 2020-04-24 16:52:55 · 3238 阅读 · 1 评论 -
AIDL 跨进程通讯简单应用
AIDL 跨进程通讯简单应用关于多进程在Android中,每一个应用都是一个独立的进程。有时候部分模块处于特殊需求,也需要在独立的进程中运行。同时多进程可以增加应用的可用内存空间(分配给单独进程的空间不变)Android中常用的进程间通讯(IPC)有以下几种AIDLMessengerBundleContentProviderBroadcastReceiver文件共享Socke...原创 2019-12-31 12:06:55 · 120 阅读 · 0 评论 -
Android P ImageDecoder 封装工具类
Android P ImageDecoder 封装工具类翻阅安卓版本信息时,发现在Android P中新增了一个用于替代BitmapFactory的类ImageDecoder类,稍微研究了一下,感觉很有趣,便尝试着写了个工具类出来丰富我的个人开发框架基本用法// 测试方法 javavoid test(File file){ ImageDecoder.Source source = ...原创 2019-12-27 17:55:49 · 921 阅读 · 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 · 132 阅读 · 0 评论 -
Android Preference 保存应用设置
Preference 保存应用设置个性化是Android的一大特点,根据用户习惯不同app应提供修改设置的页面。因此app需要面对大量需要持久化的变量。引入 Preference 库来实现这一需求导入原有的Preference包已被弃用,建议使用AndroidX下的Preference在app.build.gradle中添加以下依赖dependencies { // ... ...原创 2019-12-27 15:27:04 · 3008 阅读 · 0 评论 -
画中画模式笔记
画中画模式实现可以通过hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)判断系统是否支持画中画模式系统默认情况下不会为应用提供画中画支持。通过在Manifest.xml文件中为activity标签添加android:supportsPictureInPicture和android:resizeableActivity为 tr...原创 2019-12-27 15:24:15 · 589 阅读 · 1 评论