![](https://img-blog.csdnimg.cn/direct/d815d3cb55d44f9da0e5a27415b114dc.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
安卓开发
文章平均质量分 57
记录android相关博客
陈壮实的搬砖生活
软件工程渣硕一个,移动开发死粉(目前仅会android),OCR、AIGC爱好者,欢迎和大家交流
展开
-
[Java、Android面试]_24_Compose为什么绘制要比XML快?(高频问答)
Compose为什么比xml绘制速度更快?原创 2024-04-30 13:41:31 · 1972 阅读 · 2 评论 -
[Java、Android面试]_23_使用ViewModel翻转屏幕后数据为什么还能显示?
在Activity启动时,ActivityThread调用performLaunchActivity()方法,将存储在ActivityClientRecord中的lastNonConfigurationInstances通过Activity的attach()方法传递到对应的Activity中,然后通过getLastNonConfigurationInstance()恢复mViewModelStore实例对象,最后根据对应的key拿到销毁前对应的ViewModel实例。原创 2024-04-30 13:35:15 · 235 阅读 · 3 评论 -
[Java、Android面试]_22_APP启动流程(中频问答)
当用户点击APP图标后,Launcher进程(实际上就是一个Activity)会接受用户的点击事件,Launcher会通过ActivityManagerProxy已Binder方式向system_server进程发送startActivity请求;新的APP进程会使用native方法获取到ActivityManagerProxy从而使用Binder向system_server进程发送attch application请求,这个过程会将APP进程的binder给到AMS;原创 2024-04-29 11:23:31 · 550 阅读 · 3 评论 -
Java、Android面试高频系列文章合集
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-04-24 14:52:09 · 370 阅读 · 0 评论 -
[Java、Android面试]_21_Dalvik VM与JVM的区别
首先会孵化出System_Server(android绝大多系统服务的守护进程,它会监听socket等待请求命令,当有一个应用程序启动时,就会向它发出请求,zygote就会FORK出一个新的应用程序进程).每当系统要求执行一个android应用程序时,Zygote就会运用linux的FORK进制产生一个子进程来执行该应用程序。dalvik进程管理是依赖于linux的进程体系结构的,如要为应用程序创建一个进程,它会使用linux的fork机制来复制一个进程(复制进程往往比创建进程效率更高)。原创 2024-04-24 14:41:08 · 440 阅读 · 11 评论 -
[Java、Android面试]_20_Android的四种启动模式(高频问题)
Android启动模式原创 2024-04-21 15:30:57 · 555 阅读 · 4 评论 -
[Java、Android面试]_19_单例模式(高频问题)
高效写一个单例模型原创 2024-04-21 15:07:31 · 652 阅读 · 2 评论 -
[Java、Android面试]_18_详解Handler机制 & 常见handler面试题(非常重要,非常高频!!)
本文主要讲解了handler运行机制,包括一些常用问题:handler内存泄漏分析,handler消息有无上限等原创 2024-04-13 09:42:40 · 1333 阅读 · 3 评论 -
[Java、Android面试]_17_Fragment和Service生命周期
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-04-11 17:27:36 · 358 阅读 · 0 评论 -
[Java、Android面试]_16_Activity生命周期
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-04-09 13:44:15 · 559 阅读 · 0 评论 -
[Java、Android面试]_15_Android为什么使用Binder?
Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志,前面提到C/S架构,Android系统中对外只暴露Client端,Client端将任务发送给Server端,Server端会根据权限控制策略,判断UID/PID是否满足访问权限,目前权限控制很多时候是通过弹出权限询问对话框,让用户选择是否运行。Binder是基于C/S架构的,Client端有什么需求,直接发送给Server端去完成,架构清晰明朗,Server端与Client端相对独立,稳定性较好;原创 2024-04-09 13:31:26 · 563 阅读 · 0 评论 -
[Java、Android面试]_14_Retrofit的作用
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。可以控制对原有对象的访问,在原有对象的访问基础上做一些额外的能力。不需要提前写好代理类,而是使用反射自动生成代理对象。静态代理:提前写好代理类。原创 2024-03-23 11:01:40 · 167 阅读 · 0 评论 -
[Java、Android面试]_13_map、set和list的区别
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-03-22 12:02:53 · 357 阅读 · 0 评论 -
[Java、Android面试]_12_java访问修饰符、抽象类和接口
7)Static不能修饰抽象方法,因为静态类可以通过方法名直接调用,但抽象方法没有方法体,所以使用static修饰没有意义;接口中的所有方法都是抽象的,接口的方法默认为public abstract类型,接口中的成员变量类型默认为public static final。当使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。1)抽象类和抽象方法都必须用abstract来修饰,抽象方法不能有实体;4)抽象类的不一定包含抽象方法,但是抽象方法的类必定是抽象类;原创 2024-03-22 10:47:29 · 429 阅读 · 0 评论 -
[Java、Android面试]_11_线程的启动方式和区别
通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。· Callable重写的是call()方法,Runnable重写的方法是run()方法。· call()方法执行后可以有返回值,run()方法没有返回值。· call()方法可以抛出异常,run()方法不可以。原创 2024-03-21 10:02:10 · 417 阅读 · 0 评论 -
[Java、Android面试]_10_Java中==与equal()方法的区别?重写equal()方法?
如果是八种基本类型,则比较的是值是否相等;如果是引用类型,比较的是地址是否相等;(1).equal不能用于基本类型;(2)如果是引用类型,比较的是地址;另外,有些会重写.equal()方法,如String、Date,这时是比较的值是否相等。(3)重写euqal方法要确保 equals() 方法遵循传递性、自反性、对称性和一致性原则,即满足 a == b,b ==c,则 a == c。重写 equals() 方法时,通常也需要重写 hashCode() 方法,以保持对象在散列数据结。原创 2024-03-20 10:49:33 · 426 阅读 · 0 评论 -
[Java、Android面试]_09_Synchronized、volatile、Lock并发
synchronized 是 Java 中的关键字,用于实现线程同步和互斥,只能是非公平锁。它可以用于方法或代码块中,确保在同一时间只有一个线程可以访问同步代码。使用 synchronized 可以保证线程安全,但可能会引起性能问题,因为它会导致线程阻塞等待锁的释放原创 2024-03-19 10:15:23 · 945 阅读 · 0 评论 -
[Java、Android面试]_08_强软弱虚四种引用及应用场景
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-03-18 13:44:43 · 1172 阅读 · 0 评论 -
[Java、Android面试]_07_继承与多态、重写与重载
继承是一种面向对象编程的机制,允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法。多态是面向对象编程的一种特性,允许不同的子类对象以统一的方式进行访问和操作。多态通过方法的重写(覆盖)和方法的动态绑定来实现,使得不同子类对象可以对相同的方法调用表现出不同的行为。从现实中来看,私有成员可以被继承的。能继承不代表可以直接访问父类的属性,也不代表不能间接的访问父类的属性。二方面为了扩展程序,继承的子类中除了父类的成员,还可以有自己的成员。· 静态的成员:在类中是可以被继承的。在接口中不能被继承。原创 2024-03-17 11:49:05 · 375 阅读 · 2 评论 -
[Java、Android面试]_06_内部类、静态内部类和匿名类
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-03-16 15:56:14 · 396 阅读 · 0 评论 -
[Java、Android面试]_05_内存泄漏和内存溢出
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-03-15 15:28:33 · 462 阅读 · 0 评论 -
[Java、Android面试]_04_进程、线程、协程
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。原创 2024-03-14 14:56:42 · 446 阅读 · 0 评论 -
[Java、Android面试]_03_java内存管理:虚拟内存、堆、垃圾回收
虚拟机栈存放的是基本数据类型(boolean、byte、char、short、float、long、double)以及对象的引用类型(reference类型,它不同于对象本身,根据不同的虚拟机实现,他可能是一个指向对象起始地址的应用指针,也可能是一个指向代表对象的句柄等)和returnAddress类型(指向了一条字节码指令的地址)线程私有,它的作用是记录当前线程所执行的位置,这样,当线程重新获得CPU的执行权的时候,就直接从记录的位置开始执行,分支、跳转、循环、异常处理也都依赖这个程序计数器来完成。原创 2024-03-14 14:44:27 · 1239 阅读 · 0 评论 -
[Java、Android面试]_02_HashMap的原理
是为了能利用位运算(&)来求 key 的下标,而 h&(length-1) 是为了充分利用 table 的空间,并减少 key 的碰撞;原创 2024-03-13 17:46:20 · 1132 阅读 · 2 评论 -
[Java、Android面试]_01_多线程: 重要参数、状态、优雅停止线程等
基于数组的有界阻塞队列,按FIFO排序。由于该队列的近似无界性,当线程池中线程数量达到corePoolSize后,再有新任务进来,会一直存入该队列,而不会去创建新线程直到maxPoolSize,因此使用该工作队列时,参数maxPoolSize其实是不起作用的。当添加一个 任务时,核心线程已满,线程池还没有达到最大线程数,并且没有空闲线程,工作队列已满的情况下,就会创建一个新线程并执行。创建一个可缓存线程池,当线程池的数量过大,它可以有效回收多余的线程,如果线程数量不足,那么它可以创建新的线程。原创 2024-03-12 22:24:34 · 712 阅读 · 1 评论 -
Android, 笔记+课表的app实现
笔记课表,不同于超表和课程格子等笔记类软件,笔记课表的核心是将课表和笔记进行深度绑定,点击每个课表,就进入到笔记view中,点击其中的item就可以进入到笔记详情;该应用已上线,各位可以直接百度搜索"笔记课表",即可下载。原创 2023-08-07 17:44:09 · 358 阅读 · 0 评论 -
Android多模块开发
app为主模块 app-setting为功能模块,可作为独立模块运行,也可作为其他模块的资源模块 app-video为功能模块。原创 2023-05-07 23:01:11 · 1826 阅读 · 1 评论 -
Android(kotlin)JetPack系列学习——3.LiveData(含源码)
LiveData是一个可观察的数据持有者类(响应式编程),它也是有生命周期感知的;LiveDate最重要的是它了解其观察者的生命周期, 如Activity和Fragment.这就意味着实时数据仅更新于处于活动生命周期状态的应用程序组件,如Activity和Fragment。因此,当LiveDate发生变化时,UI会收到通知,然后UI根据新数据重新绘制自己。原创 2022-11-02 21:50:44 · 1204 阅读 · 3 评论 -
Android(kotlin)JetPack系列学习——2.ViewModel(含源码)
(1)ViewModel 类旨在以注重生命周期的方式存储和管理界面相关数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。(2)对于简单的数据,activity 可以使用 onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,而不适合数量可能较大的数据,如用户列表或位图。这种情况就可以使用ViewModel来解决!(3)根据之前在公司实习的经验,数据相关的都放在ViewModel。原创 2022-11-02 20:57:27 · 1372 阅读 · 0 评论 -
Android(kotlin)JetPack系列学习——1. Lifecycle(含源码)
lifeCycle主要是用来解耦的,LifeCycle可以帮助开发者创建可感知生命周期的组件。这样,组件便能够在其内部管理自己的生命周期,从而降低模块间的耦合度,并降低内存泄漏发生的可能性。LifeCycle不只对Activity/Fragment有用,在Service和Application中也能大显身手。使用Lifecycle解耦页面与组件使用LifecycleService解耦Service与组件使用ProcessLifecycleOwner监听应用程序周期。原创 2022-10-30 15:30:17 · 785 阅读 · 0 评论 -
Kotlin Flow响应式编程
先记录一下,怕后续忘记。原创 2022-10-25 11:13:51 · 490 阅读 · 0 评论 -
Android使用Banner框架实现轮播图
该banner实现了自动轮播、圆角矩形等小功能,具体看下面代码吧!原创 2022-07-20 18:58:59 · 916 阅读 · 0 评论 -
《第一行代码(第三版)》kotlin开发Android,学习笔记(进行中ing)
(1)Kotlin语法简洁,同样功能,kotlin可能会比java减少50%的代码量;(2)语法更加高级,使开发效率提升;(3)kotlin在语言安全性上下了工夫,几乎杜绝了空指针这个全球崩溃率最高的异常;(4)与Java100%兼容,使得Kotlin可以直接调用Java编写的代码,可以无缝使用Java三方库。注:在线kotlin编程网址https://try.kotlinlang.org(1)val: 申明一个不可变的变量,这种变量在初始赋值后就不能重新赋值了,对应Java中的final变量;(原创 2022-06-29 09:44:31 · 3221 阅读 · 0 评论 -
android,连接手机测试java后台的注意事项
Step1: 电脑开热点,手机连接电脑开的热点,使手机与电脑在同一网段Step2: 关闭手机的数据网络,最好关闭。本人有几次就是因为没有关闭数据网络,浪费了很多时间;Step3: 打开电脑cmd,输入"ipconfig",查看IP地址,如下:将图中的ipv4地址挨个放到android中进行测试,总有一个可以连接后台。注:如果还是不行,可以关闭电脑的防火墙试试。...原创 2022-05-14 23:31:39 · 344 阅读 · 0 评论 -
Android,懒加载
添加链接描述转载 2022-05-08 10:30:32 · 140 阅读 · 0 评论 -
Android,Retrofit+RxJava网络框架的使用
1. 说明Retrofit+RxJava这套组合的网络框架在Android开发中还是相对好用的,本文根据自身实验简要说明一下其用法。若有大佬路过,发现其中不妥,还请指出。2. 用法Step1: 建立后台返回的JSON数据 private Integer status; //状态码 private String message; //返回信息 private Object obj; //返回对象Step2: 前端接受的基本数据类型 pr原创 2022-04-28 21:47:39 · 2917 阅读 · 0 评论 -
android解决BottomNavigationView超过三个组件文字不显示的问题(一行代码解决)
1. 问题描述当我们在使用BottomNavigationView做底部bar时会多半遇到这样的情况:超过三个组件后文字不显示的问题,只有点击对应图标才显示,如图:2. 问题解决在xml文件里面添加代码:app:labelVisibilityMode="labeled"即可解决,详细代码如下, <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/na原创 2022-04-15 10:18:49 · 2815 阅读 · 1 评论 -
Android开发,获取当前手机网络地址
1. 获取手机卡的网络IP//获取手机卡的网络 private fun getHostIp() : String{ var ip : InetAddress ?= null try { var en : Enumeration<NetworkInterface> = NetworkInterface.getNetworkInterfaces() while(en.hasMoreElements()){原创 2021-08-19 11:55:01 · 778 阅读 · 0 评论 -
Android内存优化,常见内存泄漏及优化方案
前言在安卓开发中,一些不好的编程习惯会导致应用出现内存泄漏的情况。1. 单例导致的内存泄漏单例模式在开发中是非常常见的,但因为单例模式的静态特性使得其生命周期同应用生命周期一样长,如果一个对象没有用处了,但单例还持有它的引用,那么在整个生命周期中都不会被回收,就可能导致内存泄漏。如下代码:public class Singleton { private static Singleton singleton = null; private Context mContext; public原创 2021-08-18 11:33:08 · 312 阅读 · 0 评论 -
Android,获取网速上下行速度
package tech.tosee.app.utilsimport android.net.TrafficStatsimport java.math.BigDecimalclass GetUpAndDownloadSpeed { private var mCurrentTotalUp : Long = 0 //当前手机总的上行流量 private var mCurrentTotalDown : Long = 0 //当前手机总的下行流量 private原创 2021-08-18 09:43:02 · 2626 阅读 · 2 评论