
Android
文章平均质量分 82
Icarus_
会一点Android
展开
-
Android firebase消息推送集成 FCM消息处理
你可以使用并利用其提供的样式,如InboxStyle等来定制通知的视觉样式。val builder = NotificationCompat.Builder(this, channelId) // 使用创建的通道ID.setSmallIcon(R.drawable.ic_notification) // 设置小图标.setContentTitle("Example Title") // 设置通知标题.setContentText("Example Description") // 设置通知内容。原创 2024-05-26 21:28:00 · 2359 阅读 · 0 评论 -
android 避免混淆类名和方法名,但是方法内容需要被混淆
要避免在使用 ProGuard 或 R8 进行代码混淆时混淆特定类名和方法名的同时让方法内容被混淆,你需要在 ProGuard 配置文件中使用。请按照你的实际需求调整上面规则中的类名和方法名。此外,你需要确保规则覆盖了所有你希望避免混淆的情况。这些规则允许你指定保留类名和方法名的同时允许方法内部代码被混淆以减小体积和提高安全性。这个完整的类名不会被混淆,所有的公共成员变量和方法名也保持原样,但它们的内部实现可以被混淆。用于保留指定类的成员,但允许类本身的名字被混淆;如果类名也需要不被混淆,可以使用。原创 2024-05-24 12:28:31 · 1112 阅读 · 0 评论 -
Android app如何禁止运行在模拟器中
请注意,没有完美的方法来检测所有模拟器,因为模拟器们的开发者可能会模仿真实设备的属性。由于模拟器可以伪造这些值,因此某些精心设计的模拟器可能会通过这些检测。此外,这些检测方法可能会随着 Android 系统和模拟器技术的更新而需要相应的更新。禁止 Android 应用程序在模拟器上运行涉及到在运行时检测应用是否在模拟器上运行,并根据情况做出相应的处理。还要考虑到,禁止在模拟器上运行可能会影响那些合法使用模拟器进行测试和开发工作的用户。这个方法检查了多个系统属性,这些系统属性是模拟器的常见标识。原创 2024-04-10 17:50:17 · 2011 阅读 · 0 评论 -
为什么android创建Fragment推荐用newInstance
实例并同时提供参数的一种标准模式。这种模式通常称为静态工厂方法模式,在Android开发中被广泛使用,尤其是用于。应该有一个空的构造函数,以便在配置更改和重建的时候系统能够重新实例化它们。的单例,每次调用都会生成一个新的实例。通常情况下,每次需要显示对话框时,都创建对话框的新实例是最佳实践。(例如,在内存不足时杀死进程后恢复、设备旋转或其他配置更改)时,提供的。这意味着使用过这种模式创建的。需要的参数和创建过程封装在一起,使外部代码不直接与。方法不是因为它是一个单例,而是因为这是创建。参数的官方推荐方式。原创 2024-04-04 17:22:17 · 978 阅读 · 0 评论 -
客户端架构
主流架构演进与项目架构改造。原创 2022-09-20 11:51:15 · 1060 阅读 · 0 评论 -
kotlin进阶
八、Lambda 表达式高阶函数高阶函数是将函数作为参数或返回函数的函数 suspend fun <T : BaseRpcNetworkResult> executeRpc(block: suspend () -> BaseRpcNetworkResult): RpcResponse<T> { runCatching { block.invoke() }.onSuccess { data: B..原创 2022-05-06 15:05:10 · 1234 阅读 · 0 评论 -
kotlin基础
kotlin 中的高阶函数高阶函数即指:将函数用作一个函数的参数或者返回值的函数。//block1 无参数无返回值函数类型 val block1: () -> Unit // block2 无参数返回值为 String 的函数类型 val block2: () -> String // block2 有一个 Int 类型的参数无返回值的函数类型 val block3: (Int) -> Unit // block4 有2个参数返回值原创 2022-04-26 23:13:41 · 3093 阅读 · 0 评论 -
ARouter原理
一、编译过程1、注解我们在要跳转的Activity上面添加了@Route注解,ARouter 的自动注册是利用了编译期自定义注解的处理来完成的,我们看一下这个注解的定义:@Target({ElementType.TYPE})@Retention(RetentionPolicy.CLASS)public @interface Route{ String path(); String group() default ""; String name() default "";原创 2021-08-09 14:37:09 · 486 阅读 · 0 评论 -
RxJava源码分析
1、创建Observable调用一个create方法创建Observable,会检查ObservableOnSubscribe是否为null,使用RxJavaPlugins的onAssembly装配一个新建的ObservableCreate,他是Observable的子类 @CheckReturnValue @NonNull @SchedulerSupport(SchedulerSupport.NONE) public static <T> Observabl原创 2021-07-28 23:33:46 · 229 阅读 · 0 评论 -
Android 热修复与插件化学习
第1章 class文件与dex文件解析热修复解决的问题刚上线就发现严重的问题一些小功能及时推送给用户使用插件化解决的问题应用越来越大带来的各种技术限制应用越来越大带来的合作开发1、class和dex文件详解一、class文件基本概念能被JVM识别并加载执行的文件格式class文件作用:记录一个类文件所有信息生成class文件:通过IDE自动帮我们build;通过javac手动生成public class Main { public static void mai原创 2021-06-23 18:45:38 · 293 阅读 · 1 评论 -
主流的热修复方案
主流的热修复方案主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa、Tinker等;另一类就是native hook方案,如阿里开源的Andfix和Dexposed。有一些问题,基于native hook的方案:需要针对dalvik虚拟机和art虚拟机做适配,需要考虑指令集的兼容问题,需要native代码支持,hook方案都是直接依赖修改虚拟机方法实体的具体字段如果Android厂家对代码进行改造兼容性上会有一定的影响基于Multidex的方案,需要反射更改DexEleme原创 2021-06-21 18:45:16 · 500 阅读 · 0 评论 -
RePlugin源码分析
Replugin源码解析一、ClassLoader介绍有3个,BootClassLoader,PathClassLoader,DexClassLoaderBootClassLoader用来加载系统类,如Android中各种SystemManager各种Service类,对于所有应用来说加载到的都是同一个系统类,这个BootClassLoader是属于系统的,应用无法使用,防止应用随意加载系统级的类。PathClassLoader应用级的,是系统为每个应用分配的ClassLoader,用来加载已原创 2021-06-01 12:11:22 · 635 阅读 · 0 评论 -
RxJava的使用入门
RxJava是一个使用可观察序列来编写异步和基于事件的程序的库。首先添加依赖implementation 'io.reactivex.rxjava2:rxjava:2.2.6'1. Hello World1.1先写一个简单版本的,创建一个消费者consumer,也可以称之为订阅者或观察者,消费者实现了accept方法,接受一个字符串类型数据或事件,被观察者Observable通过just方法发出一个“Hello World”,我们使用subscribe方法指定呼唤的接收者或消费者,即consum原创 2020-06-12 15:45:36 · 423 阅读 · 0 评论 -
Retrofit源码分析
项目地址为https://github.com/square/retrofit官方文档为https://square.github.io/retrofit/这里分析的版本是2.3.01.动态代理代理模式是一种常用的设计模式,在某些场景下使用某些功能,并不是直接调用实现类,而是通过代理类完成,通过代理,我们可以隐藏实现类的细节,在不修改类的基础上,增加额外的功能。先说一下静态代理,即一个实...原创 2020-01-09 16:31:36 · 340 阅读 · 0 评论 -
OkHttp源码分析
关于OkHttp的使用可以看这篇文章https://blog.youkuaiyun.com/Icarus_/article/details/103702167OkHttp的源码地址https://github.com/square/okhttp,我这里看的是3.10.0版本1.OkHttpClient的创建创建方式有2种,一种是通过建造者模式建造出来,一种是直接new出来,直接new一个OkHttpCl...原创 2019-12-31 14:07:14 · 260 阅读 · 0 评论 -
Android Jetpack组件学习 ViewModel & LiveData
一、简介ViewModel - 提供了一种创建和检索绑定到特定生命周期的对象的方法。ViewModel通常存储视图数据的状态,并与其他组件通信,例如数据存储库或处理业务逻辑层。LifecycleOwner / LifecycleRegistryOwner -无论是LifecycleOwner和LifecycleRegistryOwner都是AppCompatActivity和Support ...原创 2019-12-26 10:09:18 · 312 阅读 · 0 评论 -
Android Jetpack组件学习 Room
一、配置gradle在build.gradle (Module: app)中apply plugin: 'kotlin-kapt'...dependencies {// Room componentsimplementation "androidx.room:room-runtime:$rootProject.roomVersion"implementation "androidx....原创 2019-12-26 10:07:30 · 321 阅读 · 0 评论 -
Android bitmap占用内存的大小
文件夹对应的关系会根据不同的密度进行缩放会根据不同的密度进行缩放运行时获取大小图片来源png读取,1121314=58688jpg读取不同drawable中的图片大小在对应的密度里面...原创 2019-12-26 09:42:12 · 363 阅读 · 0 评论 -
Android开发工程师如何写简历
第一章一、简历表达的宗旨1、简洁性排版清晰简介不是少,亮点,优势要突出挑选重要的突出的表达2、真实性可以包装,不能伪造量化指标说明(前后crash量的变化,线上bug数的变化,开发成本节约了多少)3、全面性联系方式等基本信息要全面履历过的公司要全面每个公司都尽量有个两点的项目体现4、 简历涵盖内容的四要素基本信息工作经历项目经验列举比较有亮点的2...原创 2019-12-26 09:34:47 · 1539 阅读 · 0 评论 -
OkHttp的使用
1.介绍OkHttp是由Square公司开发的一个用于Android和Java的HTTP/HTTP2的网络请求库,它的一些优点:在HTTP2的支持下,如果请求的host是同一个时,允许这些请求共用一个socket使用连接池减少网络延迟,如果HTTP2不可用透明的GZIP压缩,减少数据流量缓存网络响应,避免重复网络请求除此之外,还可以自动从常见网络错误中恢复过来。如果服务器有多个IP...原创 2019-12-25 16:55:07 · 271 阅读 · 0 评论 -
ButterKnife源码分析
ButterKinfe的工作原理1.编译时扫描注解,并作相应处理,使用javapoet库生成Java代码2.调用ButterKnife.bind(this)方法时候将id和上下文绑定在一起ButterKinfe使用编译时注解的方式完成Android控件和点击事件的绑定,不用重复的去写findViewById和setOnClicListener等代码,使用方法非常简单,看官方文档 http:/...原创 2019-12-24 16:45:50 · 255 阅读 · 0 评论 -
EventBus 原理 源码分析
EventBus项目地址为https://github.com/greenrobot/EventBus,clone到本地,主要看EventBus这个类就可以关于EventBus的使用可以阅读这篇文章https://blog.youkuaiyun.com/Icarus_/article/details/1036851941、注解定义EventBus使用注解@Subscribe来标识一个注册方法,Reten...原创 2019-12-24 16:35:15 · 292 阅读 · 0 评论 -
EventBus及其索引的使用
一、EventBus的介绍EventBus是事件总线的意思,是一个事件发布和订阅框架,解耦发布者和订阅者,用来简化Android的组件间通信,如Activity,Service,Fragment之间的通信等,在异步线程和主线程通信时也可以用到这个框架。Android实现消息传递的方法有很多,比如Handler,全局广播,本地广播,Intent,接口回调,观察者模式等。他们有着不同的使用场景,h...原创 2019-12-24 16:31:52 · 731 阅读 · 0 评论 -
Activity manifist Android activity 清单文件配置介绍
activity可以配置如下<activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"]原创 2019-03-08 14:49:21 · 830 阅读 · 0 评论 -
Android studio如何更改包名
1.首先创建一个新包所需的名称的文件夹,在java文件夹上单击右键-> new -> package.2.然后,选择并拖动你以前包中所有的类到你的新的文件夹中。Android Studio 将重构所有的包名。3.最后,删除旧的包。原创 2016-08-15 15:28:41 · 654 阅读 · 0 评论