- 博客(41)
- 收藏
- 关注
原创 Android原生Widget使用步骤
在receiver标签下,添加广播的Action,以及在meta-data标签下,表明这个广播接收器是一个原生Widget,并加载原生Widget配置文件。4.继承AppWidgetProvider(实际上是一个广播接收器)2.WidgetInfoProvider文件。3.AndroidMainfest文件。三个XML文件以及一个class文件。1.Widget布局文件。
2024-12-30 18:59:59
358
原创 【JetPack】WorkManager笔记
WorkManager 是 Android Jetpack 库中的一个重要组件。它用于处理那些需要在后台可靠执行的任务,这些任务可以是一次性的,也可以是周期性的,甚至是需要满足特定条件才执行的任务。例如,它可以用于在后台上传文件、下载更新、清理缓存等操作。与传统的后台处理方式相比,WorkManager 具有很多优势。它可以根据设备的状态(如网络可用性、电量等)智能地调度任务,确保任务能够在合适的时机执行。即使应用程序进程被杀死,它依然能够保证任务的执行,这对于一些重要的后台任务来说是非常关键的。
2024-12-22 11:04:48
309
原创 【JetPack】Navigation知识点总结
当你想切换Fragment时,使用NavController对象,告诉它你想要去Nlavigation Graph中的哪个Fragment,NavController会将你想去的Fragment展示NavHostFragment中。一个特殊的Fragment,可以将它看作是其他Fragment的容器,Navigation Graph中的Fragment正是通过NavHostFragment进行展示的。一种新的XML资源文件,包含应用程序所有的页面,以及页面间的关系。1.创建Fragment。
2024-12-20 23:13:46
480
原创 【AIDL】in out inout标签
in 为定向 tag 的话表现为服务端将会接收到一个那个对象的完整数据,但是客户端的那个对象不会因为服务端对传参的修改而发生变动;inout 为定向 tag 的情况下,服务端将会接收到客户端传来对象的完整信息,并且客户端将会同步服务端对该对象的任何变动。out 的话表现为服务端将会接收到那个对象的的空对象,但是在服务端对接收到的空对象有任何修改之后客户端将会同步变动;AIDL中的定向 tag 表示了在跨进程通信中数据的流向。数据流向是针对在客户端中的那个传入方法的对象而言的。
2024-12-19 10:52:59
171
原创 【JetPack】Room数据库笔记
Query注解下的返回值可以是一个LiveData类型,在Activity或者Fragment中监听这个LiveData值的变化,执行刷新UI的操作。
2024-12-17 19:24:50
351
原创 Android中布局及常见属性
线性布局:将控件在布局中按线性排列,按方向可以分水平和竖直。相对布局:控件的布局位置相对于其他控件的位置来设置。帧布局:从左上角开始进行分布,逐层叠加。约束布局:在可视化视图中设置位置。绝对布局:设置绝对位置来设置。
2023-04-16 20:01:12
113
原创 JVM的类加载机制
启动类加载器(Bootstrap)//启动类加载器加载了什么public class ClassLoaderTest { public static void main(String[] args) { URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for(URL url:urls) { System.out.println(url.toExternalForm()); } }}...
2023-04-16 17:43:20
98
原创 HashMap和HashTable的区别
HashMap1、没有synchronized修饰线程非安全2、允许key,value值为nullHashTable1、线程安全2、不允许键值对为nullHashMap的底层实现:数组+链表jdk8开始链表到8,数组长度超过64,链表转化为红黑树,元素以内部类node节点存在。...
2023-04-16 17:43:06
102
原创 HashCode与equals
HashCode:HashCode()的作用是获取哈希码,也称散列码,返回值是一个int型的整数。以 java.lang.Object来理解,JVM每new一个Object,它都会将这个Object丢到一个哈希表中去,这样的话,下次做Object的比较或者取这个对象的时候,它会依据对象的hashcode再从Hash表中取这个对象。这样做的目的是提高取对象的效率。equals...
2023-04-16 17:30:05
72
原创 Android第一行代码(2)
使用Android的日志工具LogLog.v():打印最为琐碎的、意义最小的日志信息。(verbose)Log.d():打印调试信息。(debug)Log.i():打印重要的日志信息。(info)Log.w():打印一些警告信息。(warn)Log.e():打印程序中的错误信息。(error)————————————————版权声明:本文为优快云博主「salmon_zhang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blo
2023-04-16 17:27:14
86
原创 Android中广播接收器
发出之后,同一时间只有一个广播接收器可以收到,接受顺序根据:priority(-1000,1000),priority如果相等,就看注册方式,动态>静态,也相同,就看注册时间。:内部类继承Receiver,重写onReceiver方法,通过registerReceiver注册。:在AndroidManifest.xml中通过标签声明。:发出之后,同一时间所有广播接收器都可以收到。:只在一个应用内传播。
2023-04-16 17:10:54
173
原创 Android中Handler的使用
*Looper:**便利MessageQueue中的消息,有Message就发送给Handler,使用handlerMessage进行处理。**Handler:**处理者,负责sendMessage,发送消息,handlerMessage处理消息。**Message:**线程中传递的消息,可以通过一些what字段区分不同线程。**MessageQueue:**消息队列,存储消息。
2023-04-15 21:38:29
68
原创 Android中四种启动模式
如果栈中存在要启动的活冻,那么将它之上的实例全部出栈,它到栈顶。:如果启动的活动在栈顶,就不在创建。:每启动一个活动,就创建一个实例。:启动该活动存放到在一个新栈中。
2023-04-14 23:20:35
93
原创 Android中生命周期
Activity第一次被创建的时候执行一次,通常执行初始化操作,例如加载布局,组件,绑定事件。:暂停状态,当前Acitivty启动其他活动,如弹出弹窗等,并不是完全不可见。:Activity被创建完后,有不可见变可见调用。:运行状态,位于活动栈栈顶,用户可与活动进行交互。:重新被调用,由停止变为可见状态。
2023-04-14 23:11:11
69
原创 车载开发中常见的名词
对娱乐、应用生态有需求的中控、副驾一般由Android 系统控制,而对稳定性、安全性要求较高的仪表盘,则由 QNX 系统直接控制,Android可以看做是一个运行在 QNX 上的虚拟系统,其底层技术原理就是Hypervisor。用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信,在中控屏上可以随时查看、设置车门、发动机、后备箱这些模块,其实就是借助CAN bus实现的。在将Android打造为功能齐全的信息娱乐平台的过程中,我们添加了对汽车特定要求,功能和技术的支持。
2023-04-10 15:40:43
290
原创 synchronized知识总结
需要注意的是如果一个线程A调用一个实例对象的非static synchronized方法,而线程B需要调用这个实例对象所属类的静态 synchronized方法,是允许的,不会发生互斥现象,因为访问静态 synchronized 方法占用的锁是当前类的class对象,而访问非静态 synchronized 方法占用的锁是当前实例对象锁,看如下代码。类-----共享资源-----对共享资源操作的方法(加锁)-----run方法调用。------对象2------线程。------对象3------线程。
2023-04-10 15:38:32
58
原创 匿名内部类
匿名内部类匿名内部类:匿名内部类要不然是实现了接口,要不然是继承了抽象类作用:为啥要匿名内部类,因为有的类方法里面的参数是接口或者抽象类类型的,因为接口和抽象类本身不能创建实例化对象,所以如果没有匿名内部类,就需要对其进行继承或实现,然后再创建继承和实现后的类对象,作为方法的参数。但是如果我们有匿名内部类,只需要在参数的位置:A.Test(new B(){实现抽象方法;});就可以了。...
2021-09-15 16:43:07
176
原创 Android的三种持久化方式
1、使用文件进行存储//将要存储的数据通过String s进行存储public void save(String s){ //向文件输入字节流 FileOutputStream out = null; //写入字符的缓冲区 BufferedWriter writer = null; try { //openFileOutput方法得到FileOutputStream对象 out = openFileOutput("data", Contex
2021-07-26 16:24:20
1553
原创 数据库ACID事务
总结:要么都成功,要么都失败(1)原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚(2)一致性(Consistency)一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。(3)隔离性(Isolation)隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。脏读 脏读是指在一个事务处理过程里读
2021-07-26 14:07:10
106
原创 Git版本控制器(2)
Git的基本命令:初始化git项目git init克隆代码git clone url查看状态git status从本地提交到暂存区git add .从暂存区提交到仓库git commit -m
2021-07-23 17:52:49
85
原创 Git版本控制器(1)
Git:分布式版本控制器:目前世界上最先进的版本控制系统原理图:可以看到更新了哪些版本和文件每个人都持有全部的代码下载:http://npm.taobao.org/mirrors/git-for-windows/基本的Linux命令:1、上一级目录cd ..2、切换目录单级目录cd gitcode两级目录cd JMMStudy/gitcode3、显示当前目录pwd4、清屏clear5、列出当前目录下的所有文件ls6、创建文件touch 文件名7、删除文件rm
2021-07-23 17:07:06
121
1
原创 Android广播——实现强制下线功能
1、创建ActivityCollector管理所有活动public class ActivityCollector { //List集合存放Activity public static List<Activity> activities = new ArrayList<Activity>(); //添加Activity public static void addActivity(Activity activity){ activit
2021-07-23 15:11:53
761
2
原创 Android——广播
动态注册:要在程序启动之后才可以接收广播,注册写在oncreate里1、创建广播接收器:创建class,继承BroadcastReceiver,重写onReceive方法2、创建广播: IntentFilter interFilter = new IntentFilter() interFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChange
2021-07-23 13:03:33
197
原创 Android——Activity内容小结
1、创建Activity:(1)创建class,继承Activity,重写onCreate()(2)生成布局文件(3)在AndroidManifest.xml中注册Activity(主界面有Main,LUNCHER)2、界面跳转:(1)显式:知道要跳转的class名(通常用于项目内跳转)创建Intent对象(当前Activity,跳转到的Activity.class文件)StartActivity()(2)隐式:不知道要跳转的class名(通常用于应用之间的跳转)在AndroidManif
2021-07-22 17:51:47
214
2
原创 Android第一行代码(3)onCreate()
//onCreate的方法是在Activity创建时被系统调用,是一个Activity生命周期的开始,saveInsanceState就是保存Activity的状态的public void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState);//绘制布局 setContentView(R.layout.main);//显示main.xml所定义的画面 /*R.java类中
2021-07-19 17:41:01
336
2
原创 Android第一行代码(2)——使用Android的日志工具Log
Log.v():打印最为琐碎的、意义最小的日志信息。(verbose)Log.d():打印调试信息。(debug)Log.i():打印重要的日志信息。(info)Log.w():打印一些警告信息。(warn)Log.e():打印程序中的错误信息。(error)日志等级由低到高:v -> d -> i -> w -> e为什么使用Log而不使用System.outlogcat中能添加过滤器可以控制日志级别...
2021-07-19 15:37:04
100
1
原创 Android第一行代码(1)
Android第一行代码(1)- 项目层级结构.gradle和.ideaAndroid Studio自动生成的文件,无需关心app项目的代码和资源文件build包含编译时自动生成的文件gradle包含gradle wrapper的配置文件.gitgnore将指定的目录或文件排除在版本控制之外build.gradle项目全局的gradle构建脚本,一般都不需要修改gradle.properties全局的gradle配置文件,直接影响项目中所有的gra
2021-07-19 15:16:45
111
原创 JVM的类加载机制
启动类加载器(Bootstrap)//启动类加载器加载了什么public class ClassLoaderTest { public static void main(String[] args) { URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for(URL url:urls) { System.out.println(url.toExternalForm()); } }}..
2021-07-09 21:08:12
79
原创 ArrayList和LinkedList的区别
ArrayList1、基于动态数组(如果在下标越界的时候,会新建一个数组,底层默认数组大小为10,将老数组内容存放到新数组中,扩容机制为1.5倍),连续的内存地址,适合下标访问。2、适合做查询,不适合做插入和查询。3、使用尾插法,并指定初始数组容量可提高性能。LinkedList1、基于链表,可以分散的存储在内存中。2、适合做数组插入和删除,不适合做查询。3、遍历只可以使用迭代器,和强制for,不可以使用for循环,因为每次for循环体内取得get(i)取得某一元素时都需要对l..
2021-07-09 11:14:24
58
原创 HashCode和equals
hashcode在new一个新对象的时候,java实际分为几个步骤:1、生成hashcode的值2、根据hash寻址算法找到对应的物理地址3、如果当前位置没有值,那么将对象存入4、如果有通过equals比较对象是否相同5、如果相同,不存入6、如果不同,在这里建立链表,将对象存入String a = new String(“Aa”);String b = new String(“BB”);//hashcode的值都是2112,所有会建立链表hashcode的优势:,没有ha..
2021-07-09 10:37:36
92
原创 List和Set的区别
List:有序,按对象进入的顺序保存对象,可重复,允许多个null元素对象,可以使用iterator迭代取出所有元素,也可以使用get(int index)取出指定下标的元素。List<String> list = new ArrayList<String>(); for(int i=0;i<list.size();i++) { System.out.println(list.get(i)); }for(String s : list) { S..
2021-07-08 10:57:28
147
原创 接口和抽象类的区别
抽象类可以存在普通成员函数,而接口只能存在public abstract方法抽象类中的成员变量可以是各种类型的,而接口的成员变量只能是public static final类型的抽象类只能继承一个,而接口可以实现多个接口的设计目的:是对类的一种行为约束,约束了类中应该由什么行为,也就是提供了一种机制,可以强制要求不同类具有相同的方法,但不对如何实现进行限制。抽象类设计目的:是代码的复用,当不同的类具有相同的行为的时候,且其中一部分行为实现方法一致,可以让这些类都派生自一个抽象类**(即现有子类后有.
2021-07-07 19:42:32
54
原创 重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数列表不同(类型,个数,顺序),方法返回值和访问修饰符可以不同,发生在编译时。public int add(int a,String b) {}public String add(int a,String b) {}//编译会报错重写:发生在父子类中,方法名和参数列表必须相同返回值范围可以小于等于父类抛出的异常范围也要小于等于父类访问修饰符范围要大于等于父类如果父类方法时private,final时,子类不可以重写...
2021-07-07 19:25:17
59
原创 String、StringBuffer、StringBuilder区别及使用场景
String:final关键字进行修饰,不可变,每次对字符串的改造其实都是在创建新的String对象StringBuffer:在原对象上进行操作线程安全(多线程,共享变量,结果不受影响),加了synchronized进行修饰StringBuilder:在原对象上进行操作线程不安全性能:StringBuilder>StringBuffer>String场景:经常要改变字符串内容的情况使用StringBuffer,StringBuilder。优先使用StringBuil
2021-07-07 19:14:56
202
原创 final关键字
修饰类:表示类不可以被继承修饰方法:表示方法不可以被子类重写(即不可扩展),但可以在类内重载修饰变量:表示变量一旦被赋值,就不可以更改它的值1、修饰成员变量(1)修饰类成员变量在声明时就需要被赋值,或者静态代码块赋值。(2)修饰成员变量在声明时就需要被赋值,或者代码块赋值,或者构造器赋值。2、修饰局部变量fianl修饰局部变量,不赋值不会报错,但使用前一定要赋值。public class FianlVar { //final修饰类成员变量 final static int a=0.
2021-07-07 18:59:29
65
原创 ==与equals
==:比较的是栈中的值。基本数据类型存储在栈中,引用类型变量名存储在栈中(只保存其在堆中的地址信息),实际的数据存储在堆中。所以,基本数据类型“”比较的是变量值,引用类型“”比较的是地址。equals????*如果没有重写底层默认使用的也是“==”的比较方式。**String类型已经默认重写了equals方法(就是把字符串中每个字符取出来对比一下),所以即便String是引用类型,equals比较的也是变量值。public class StringDemo { public static void
2021-07-07 17:59:52
74
原创 JDK、JRE、JVM三者区别和联系
JDK:(Java Development Kit),Java开发者工具。Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。JRE:( Java Runtime Environment) ,Java运行时环境。普通用户只需要安装JRE就可以运行Java程序。下图是JRE的安装目录:里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jr
2021-07-07 17:36:38
527
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人