Android笔记
文章平均质量分 64
根据平时学到的android知识进行归纳总结,简单记录一下学习笔记。
lly-rachel
这个作者很懒,什么都没留下…
展开
-
Eventbus 3.3.1源码分析
EventBusEventBus is a publish/subscribe event bus for Android and Java.EventBus是适用于Android和Java的发布/订阅事件总线。优点:简化组件之间的通信将事件发送方和接收方解耦在活动、片段和后台线程中表现良好避免复杂且容易出错的依赖关系和生命周期问题使代码更简单速度快很小(~60k jar)在实践中被安装量超过 1,000,000,000 的应用证明具有高级功能,如交付线程,订阅者优先级原创 2022-01-22 12:06:53 · 2549 阅读 · 0 评论 -
rxjava3 源码解析
RxjavaRxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.RxJava– JVM的反应式扩展– 一个用于使用Java虚拟机的可观察序列编写异步和基于事件的程序的库。 使用的主要设计模式包括:观察者模式,装饰器模式,适配器模式(函数传参不同有不同原创 2022-01-19 17:36:58 · 2622 阅读 · 0 评论 -
Retrofit 2.9.0 源码解析
Retrofit 2.9.01 Retrofit 1.1 retrofit介绍A type-safe HTTP client for Android and Java. 一个安全类型的http请求的客户端。底层网络请求是基于okhttp,retrofit对其进行了封装,提供了方便高效的网络访问框架 1.2 Retrofit 使用1.2.1 简单使用class RetrofitActivity : AppCompatActivity() { override fun onCreate原创 2021-12-25 20:58:49 · 1650 阅读 · 0 评论 -
OkHttp4.9.3源码解析
OkHttp4.9.3okhttp内部逻辑流程图:1. 整体结构OkHttpClientRequest 和 ResponseRealCallOkHttpClient:核心管理类,所有内部逻辑和对象归OkHttpClient统一管理,由Builder构造器生成。Request 和 Response:两个累完全符合http协议所定义的请求内容和响应内容Request:发送请求封装类,包含url、method、headers、bodyResponse:返回结果,包含code、messa原创 2021-12-03 22:53:57 · 787 阅读 · 0 评论 -
Android 消息机制详解(源码分析ThreadLocal、Looper、Handler、AsyncTask)
Android 消息机制1 概述Android 的消息机制主要是指 Handler 的运行机制以及 Handler 所附带的 MessageQueue 和 Looper 的工作过程。Android 应用是事件驱动的,每个事件都会转化为一个系统消息,即 Message 。消息中包含了事件相关的信息以及这个消息的处理人——Handler。每个进程中都有一个默认的消息队列(Message Queue,采用单链表的形式来存储消息列表),这个消息队列维护了一个待处理的消息列表,消息循环不断地从这个队列中取出消息原创 2021-09-01 22:53:26 · 363 阅读 · 0 评论 -
Binder跨进程机制
Binder跨进程机制传统的跨进程通信方式有很多,比如 Socket、信号量、管道、内存共享、消息队列等,这些都存在于 Linux 中。1 为什么要使用Binder?性能方面在移动设备上(性能受限制的设备,比如要省电),广泛地使用跨进程通信对通信机制的性能有严格的要求,Binder相对出传统的Socket方式,更加高效。Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要2次,共享内存方式一次内存拷贝都不需要,但实现方式又比较复杂。安全方面传统的进程通信方式对于通信双方的身份并没原创 2021-08-25 23:32:13 · 268 阅读 · 0 评论 -
Android设计模式——单例模式
单例模式单例类(Singleton)实现单例模式关键点:构造函数私有通过一个静态方法或枚举返回单例类对象确保单例类的对象有且仅有一个,特别在多线程环境下确保单例类对象在反序列化时不会重新构建对象 [ 1-4 方式都会在被反序列化时重新生成对象,必须加上如下方法:] 但枚举方法不存在这种问题。private Object readResolve() throws ObjectStreamException{ return sInstance; //返回现有对象,而不是默认重新生成原创 2021-08-01 17:12:24 · 215 阅读 · 0 评论 -
Android 实现全屏截图、剪裁图片、分享图片至其他应用进程功能(踩坑记录)
Android 实现全屏截图、剪裁、分享功能项目中需要用到 截图分享 的功能,特此写下查询资料过程中的踩坑记录。 1、全屏截图1.1 踩坑记录第一个坑:方法已被弃用(先前实现的全屏截图方法,已经在api28及以上弃用) // View是全屏截图 **已弃用** View getView = this.getWindow().getDecorView(); getView.setDrawingCacheEnabled(true); getVie原创 2021-05-13 16:41:09 · 1342 阅读 · 3 评论 -
在activity的toolbar中使用menu
在activity的toolbar中使用menu1 创建menu文件在res/menu中创建 activity_detail_menu.xml<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <原创 2021-05-10 20:30:55 · 165 阅读 · 0 评论 -
Kotlin实现自定义圆形ImageView
Kotlin实现自定义圆形ImageView在项目中做用户头像经常需要实现圆形头像的功能,查找资料后,实现自定义圆形ImageView效果。package com.example.customlockscreen.Utilimport android.annotation.SuppressLintimport android.content.Contextimport android.graphics.*import android.graphics.drawable.BitmapDrawab原创 2021-05-09 21:24:33 · 889 阅读 · 0 评论 -
Android在数据库储存图片资源id方法
Android在数据库储存图标资源的方法问题:项目中需要存储图标资源,若数据库中直接存储图标资源id(R.mipmap.icon)显然是有风险的做法。因为每次编译应用程序时会自动生成R文件,所以每次启动时,图片资源id都可能会发生变化。即 图片资源id(int)并不是恒不变的,不能通过数据库静态储存id来获取图片。解决方法://数据库储存 String 类型{图标资源名称}var iconName:String = resources.getResourceEntryName(R.mipmap.a原创 2021-04-26 20:42:14 · 926 阅读 · 0 评论 -
Kotlin实现沉浸式状态栏踩坑记录——图片延伸至状态栏,且不影响toolbar的占位
沉浸式状态栏实现 图片延伸至状态栏,不影响toolbar的占位 private fun steepStatusBar() { var release=Build.MODEL if (release!=null){ if (release.contains("HUAWEI")){ window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)原创 2021-04-18 21:13:21 · 760 阅读 · 1 评论 -
Android的Drawable分类汇总
Drawable的分类1、bitmapDrawable表示一张图片<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@[package:]drawable/drawable_resource" android:antialias=["true" | "false"]原创 2021-04-15 16:48:27 · 356 阅读 · 0 评论 -
activity获取某个View宽高的解决办法
问题在 Activity 启动后就获取这个View 的宽/高因为View的measure过程和Activity 的生命周期方法不是同步执行的,无法保证在 onCreate、onStart、onResume 时,某个 View 已经被测量完毕。 解决办法1、onWindowFocusChanged(hasFocus: Boolean)View已经初始化完毕,当 activity 的窗口得到焦点或者失去焦点时被调用(即当 activity 继续执行或者暂停执行时均会被调用) overrid原创 2021-04-12 22:37:16 · 117 阅读 · 0 评论 -
关于View的滑动冲突
滑动冲突场景一:外部滑动方向和内部滑动方向不一致1.1场景 ViewPager + Fragment 配合使用所组成的页面滑动效果,实现左右滑动效果,里面通常嵌套一个 ListView ,这时 ViewPager 会自动处理这种滑动冲突。 若我们没有使用 ViewPager ,就要手动处理滑动冲突 外部上下滑动、内部左右滑动1.2处理规则 根据滑动的方向来确定哪一层去拦截事件根据滑动的坐标就能确定滑动方向:滑动路径和水平方向的夹角水平方向和竖直方向的距离差:竖直方向滑动的距离原创 2021-04-12 22:30:14 · 110 阅读 · 0 评论 -
Android四大组件总结
四大组件 Android系统的四大组件分别是 Activity(活动)、Service(服务)、Broadcast Receiver(广播接收器)、Content Provider(内容提供器)其中,Activity 用于和用户交互;Service 后台运行服务,不提供界面呈现;Broadcast Receiver 用于接受系统广播或自定义广播;Content Provider支持多个应用中存储和读取数据,相当于数据库。 在使用四大组件时,都需要在AndroidManifest.xml 里声明相关原创 2021-04-12 20:45:55 · 486 阅读 · 0 评论 -
Android的IPC机制(下)—— 简单介绍 ContentProvider 和 Socket
Android的IPC机制Android的IPC机制上篇:简单介绍了Bundle、文件共享、Messenger的简单实现中篇详细介绍了如何用 Kotlin 实现 Android 的 AIDL下篇将简单介绍 ContentProvider 和 Socket IPC(Inter-ProcessCommunication),含义为进程间通信或跨进程通信,是指两个不同进程之间进行数据交换的过程。 任何操作系统都有其相应的IPC机制,例如:Windows 上可以通过剪贴板、管道和邮槽等来进行进程间通原创 2021-04-02 13:38:33 · 137 阅读 · 0 评论 -
Android的IPC机制(中)—— Kotlin 详细实现 AIDL
Android的IPC机制 IPC(Inter-ProcessCommunication),含义为进程间通信或跨进程通信,是指两个不同进程之间进行数据交换的过程。 任何操作系统都有其相应的IPC机制,例如:Windows 上可以通过剪贴板、管道和邮槽等来进行进程间通信。Linux 上可以通过命名管道、共享内存、信号量等来进行进程间通信。Android 是一种基于 Linux 内核的移动操作系统,对于 Android 来说,它也有其特有的进程间通信方式。Android的IPC机制上篇:简单介绍了Bu原创 2021-04-01 21:47:58 · 249 阅读 · 0 评论 -
Android序列化的定义及作用—Kotlin实现 Parcelable 接口
序列化 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。 序列化分为两大部分:序列化和反序列化 序列化技术将数据转化成字节流保存下来,便于网络传输、跨进程传输和将对象持久化到存储设备上。 我们需要通过反序列化将字节流打开并重构对象。 静态(static)类型的数据不能序列化,因为静态类型的数据存储在内存的静态区,我们只能将堆内存里的数据序列化。 序列化的实现是 : 实现Serializable接口和Parcelable接口Kotlin 实现 Parcelabl原创 2021-04-01 16:19:41 · 306 阅读 · 0 评论 -
Android的IPC机制(上)——Bundle、文件共享、Messenger的简单实现
IPC机制 IPC(Inter-ProcessCommunication),含义为进程间通信或跨进程通信,是指两个不同进程之间进行数据交换的过程。 任何操作系统都有其相应的IPC机制,例如:Windows上可以通过剪贴板、管道和邮槽等来进行进程间通信。Linux上可以通过命名管道、共享内存、信号量等来进行进程间通信。Android是一种基于Linux内核的移动操作系统,对于Android来说,它也有其特有的进程间通信方式。一、Bundle Android的四大组件中的三大组件(Activity原创 2021-03-30 16:10:10 · 168 阅读 · 0 评论 -
Kotlin与java实现数据类和单例类的区别
数据类java:重写equal()、hashCode()、toString()方法加以区分Kotlin:data关键字data class Cellphone (val brand :String,val price : Double)Kotlin会根据主构造函数中的参数 equal()、hashCode()、toString()单例类java:public class Singleton{ private static Singleton instance; private S原创 2021-02-28 20:45:18 · 141 阅读 · 0 评论 -
面向对象的六大原则
作为一名Android开发者,设计模式对于整个项目的开发尤其重要。Android设计模式的好处:①有效减少对项目进行再次优化升级的重复劳动。②项目开源后使代码更易于他人理解、使用、再次创作等。在此以作者本人的理解简单描述Android设计模式的六大原则。Android设计模式的六大原则分别为单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则、迪米特原则、接口隔离原则。1.单一职责原则 一个类只承担自身特有的职责。一个类如果承受太多职责(即类与类之间耦合度过高)会使大量代码难以阅读、整个项原创 2021-02-07 16:16:48 · 2625 阅读 · 0 评论 -
Android实现自定义View的自定义属性
Android的自定义属性简单介绍Android使用自定义VIew时,需要用到自定义属性的情况。1.在valus目录下创建attrs.xml<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name = "RectView"> <attr name = "rect_color" format = "color"/> </declare-styleabl原创 2021-02-02 16:23:40 · 247 阅读 · 1 评论 -
简述activity的生存周期-七个相关回调方法和四种activity启动模式
activity的生存期OnCreate:在activity第一次创建时调用,在此完成初始化布局、绑定事件OnStart:不可见->可见OnResume:activity准备好与用户交互时调用,位于栈顶,并处于运行状态OnPause:系统准备去启动或者恢复另一个activity时调用OnStop:完全不可见OnDestory:销毁之前OnRestart:停止状态->运行状态,即重新启动activity的启动模式standard:activity默认启动模式,每当启动一个act原创 2021-03-01 21:24:30 · 249 阅读 · 0 评论