自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 事件分发机制

用户通过屏幕与手机交互的时候,每一次点击、长按、移动等,都是一个事件。从手指按下屏幕开始,到手指离开屏幕所产生的一系列事件。

2024-02-01 16:12:09 918

原创 Handler 消息机制

Android的消息机制主要是指Handler的运行机制,以及Handler所附带的和Looper的工作过程。HandlerLooper这三者实际上是一个整体,只不过在开发过程中比较多地接触Handler而已。Handler的主要作用是将一个任务切换到某个指定的线程中去执行。

2024-02-01 16:01:00 1230

原创 四大组件 - ContentProvider

是一种内容共享型组件,实现了不同App进程之间的数据共享。和Messenger一样,基于的进程间通信的底层实现同样也是Binder。当所在的进程启动时,组件会同时启动并被发布到AMS进程中。

2024-02-01 15:54:19 1084

原创 四大组件 - BroadcastReceiver

组件为系统与App之间,或App与App之间,或App内部的组件与组件之间,提供了一种数据交互的方式。App内部的组件可以是系统组件,也可以是普通组件。ActivityFragmentService和。普通组件指的是:为了让代码更容易管理和维护,我们通常会将代码按照功能或作用封装成组件。(也可以称之为自定义组件)的原理类似于发布订阅模式。发送广播时所在的组件可以称为发布者,接收广播的组件可以称为订阅者。观察者模式(

2024-02-01 15:48:39 884

原创 四大组件 - Service

Service(服务)是一种不提供用户界面,可以在后台长时间运行的组件。可以在其它组件(如Activity)中启动Service组件,Service组件启动后就运行在后台,即使启动Service的其它组件(如Activity)被销毁,也不会对在后台运行的Service造成影响。此外,Service组件可以通过与其它组件(如Activity)进行绑定,从而实现组件之间的数据交互。通过Service组件,甚至还可以实现进程间通信(IPCService组件虽然是在后台运行的,但仍然运行在主线程中。

2024-02-01 15:44:40 847

原创 四大组件 - Activity

参考:《Android开发艺术探索》 第1章(Activity的生命周期和启动模式)

2024-02-01 15:41:31 875

原创 九、Kotlin 注解

注解是对程序的附件信息说明。注解可以作用在类、函数、函数参数、属性等上面。注解的信息可用于源码级、编译期、运行时。使用元注解@Retention声明注解类的作用时期。使用元注解@Target声明注解类的作用对象。定义注解类时可以声明带参数的主构造器。其中:要求参数类型必须在编译时期就能够确定下来,所以参数类型只能是基本类型、KClass、枚举、其他注解、以及这些类型的数组;不可以使用自定义类型作为参数类型。

2024-01-26 18:01:59 565

原创 八、Kotlin 反射

反射是允许在运行时期访问程序结构的一类特性(程序结构包括:类、接口、方法、属性等)。

2024-01-26 17:59:07 1241

原创 七、Kotlin 泛型

T>表示声明了一个泛型T。于是在函数func的定义中(如:形参列表上、函数体中、返回值类型上)才可以使用泛型T表示一个不确定的类型。func(1, 2) // 此时泛型 T 表示 Int 型。func<Int>(1, 'a') // 此时无法根据实参进行类型推导,应该在函数调用时手动指定泛型的具体类型。<T>表示声明了一个泛型T。于是在类中(如:成员方法定义、属性定义、内部类定义、构造器定义上)才可以使用泛型T表示一个不确定的类型。对于泛型类Foo<T>,即使当泛型参数TPerson和Son。

2024-01-26 17:51:30 1095

原创 六、Kotlin 类型进阶

顶级声明是指:文件中定义的全局变量、全局函数、类。顶级声明不能被protected修饰。顶级声明被private修饰时,表示仅当前文件内可见。null“我” 代替 “你” 处理 “它”,于是可将 “我” 称为 “你的代理”。“我” 作为 代理者;“你” 作为 被代理者;“它” 作为 代理业务。//使用 关键字object 定义一个单例类...既是单例类的类名,又是单例类的对象名。因此可以直接通过作为对象访问其中的成员。init。

2024-01-26 17:48:04 1332

原创 五、Kotlin 函数进阶

以下2点至少满足其一的函数称为高阶函数:形参列表中包含函数类型的参数//参数 paramN 可以是:函数引用、函数类型变量、或 Lambda 表达式。...返回值类型是函数类型...//可以返回:函数引用、函数类型变量、或 Lambda 表达式。Kotlin中的ListSetMap三大集合接口都定义在Kotlin文件中。在Kotlin文件中,为集合提供了大量的扩展方法,包括forEachfiltermapflatMap、…Kotlin中,List和Set集合都继承了Iterable接口;Map。

2024-01-26 17:31:14 1434

原创 四、Kotlin 表达式

运算符重载函数定义时需要加关键字operator运算符重载函数可以是:全局函数、或成员方法、或扩展方法子类重写父类的运算符重载函数时,可以省略关键字operator只有一个抽象方法的接口称为函数式接口,如Runnable接口(只有一个抽象方法run。

2024-01-25 20:17:48 1086

原创 三、Kotlin 类型初步

JavaKotlinclass Foo注意:类的访问权限修饰符默认为public。若类的{}为空,可以省略不写。JavaKotlinval x: Int = 0 // 需要显示初始化Java中定义类中的成员属性时,不需要显示初始化,会有一个默认值。但是,Kotlin中定义成员属性时,需要显示初始化。Kotlinval x: Intconstructor(x: Int) { // 副构造器(secondary constructor)this.x = x。

2024-01-25 20:11:26 1015

原创 二、Kotlin 内置类型

val定义val定义var关键字 val 表示变量 foo 为只读变量(相当于 Java 中被 final 修饰的变量)关键字 var 表示变量 foo 为可读写变量Type 表示变量类型initValue 表示定义变量时的初始化赋值// 相当于 Java 的 final String str = "Hello Kotlin";// 相当于 Java 的 int a = 10;如上代码所示,在编译时期,Kotlin可以根据初始化赋值自动推导变量的类型,所以定义变量时可以省略变量名后的 “

2024-01-25 20:03:04 1057

原创 一、Kotlin 开发环境搭建

来构建项目,所以实际项目一般创建的都是基于。语言后,我们还应该知道:Gradle。-> 在包名目录下创建出一个。切换其他版本,改下版本号即可。-> 输入包名 (同创建。项目中我们一般都会使用。工程时语言可以直接选择。配置 使我们的工程支持。文件夹用来存放源码文件。工程名) -> 选择。工程时,选择的语言是。(其他默认配置即可)

2024-01-25 19:51:22 1112

原创 六、高效并发

如果方法的同步代码中使用到的局部变量或成员变量,它们引用的对象在其它方法中也被引用到了,并且这样的其它方法会在不同的线程中被调用。为了优化,在条件允许的情况下,对指令进行一定的重新排列,使得避开获取下一条指令所需数据而造成的等待,进而直接运行当前能够立即执行的后续指令。也就是说,当一个线程要操作主内存中的变量时,先把这个变量拷贝到线程自己的工作内存中,线程只能操作拷贝到工作内存中的变量副本。同步块中的代码在执行时,系统是单线程的,因此,如果同步块中的代码越多,那么系统单线程执行的时间越长,性能越低。

2024-01-22 20:14:26 878

原创 五、垃圾回收

简单说就是:内存中已经不再被使用到的内存空间就是垃圾。垃圾收集算法是内存回收所采用的方法。而垃圾收集器则是垃圾收集算法的具体实现,通过垃圾收集器实现对内存的回收。不同厂商、不同虚拟机版本中,垃圾收集器的实现有很大差别。HotSpot虚拟机中包含的垃圾收集器如下图所示:Serial和Serial old都是串行收集器;ParNew和都是并行收集器;G1是新生代和老年代都可以使用的收集器;新生代中的Serial收集器可以和老年代中的Serial old收集器组合使用;新生代中的ParNew。

2024-01-22 20:10:35 1290

原创 四、字节码执行引擎

JVM输入字节码文件;然后对字节码进行解析并处理;最后输出执行的结果。JVM通过解释器直接解释执行字节码;或者通过即时编译器产生本地代码,也就是编译执行。也可能是以上两者皆有。

2024-01-22 19:58:35 858

原创 三、内存分配

Java堆用来存放应用系统创建的对象和数组,所有线程共享Java堆。在运行时期为Java堆动态分配内存大小,并自动进行垃圾回收。Java垃圾回收(GC)主要就是回收堆内存。对分代GC来说,堆也是分代的。堆内存在逻辑上是连续的,在物理上可以是不连续的。

2024-01-22 19:50:50 776

原创 二、类加载、连接和初始化

加载:查找并加载class文件中的二进制数据连接:将已读入内存的class文件的二进制数据合并到JVM运行时环境中去,包含如下几个步骤:验证:确保被加载的类的正确性。准备:为类的静态变量分配内存,并初始化它们。注意:这里的初始化就是设置默认值0(引用变量则是null解析:把常量池中的符号引用转换成直接引用。初始化:为类的静态变量赋初始化值注意:这里的初始值就是我们在源码中定义的初始值。自定义类加载器是的子类;通过自定义类加载器用户可以定制类的加载方式;

2024-01-22 19:37:42 970

原创 一、认识 JVM 规范(JVM 概述、字节码指令集、Class文件解析、ASM)

JVM,也就是Java虚拟机所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。即:虚拟机是一个计算机系统。这种计算机系统运行在完全隔离的环境中,且它的硬件系统功能是通过软件模拟出来的。JVM通过软件来模拟Java字节码的指令集,是Java程序的运行环境。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码opcode)以及跟随其后的0至多个代表此操作所需参数的操作数operand)所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。

2024-01-22 19:31:26 1689

原创 Java 内存模型(JMM)

不考虑重排序,x 和 y 的执行结果只有三种情况:1. 线程 one 中的 a=1;x=b 先执行完毕,再执行线程 two 中的 b=1;y=a此时,由于线程 one 中给 x 赋值的时候线程 two 中还未给 b 赋值,所以 x=0, y=12. 线程 two 中的 b=1;y=a 先执行完毕,再执行线程 one 中的 a=1;x=b此时,由于线程 two 中给 y 赋值的时候线程 one 中还未给 a 赋值,所以 x=1, y=0。

2024-01-16 18:54:01 1070

原创 Java 线程池

此时,如果线程数量未达到线程池的最大线程数,那么会立即启动一个非核心线程来执行任务。如果线程池中的线程数量已经达到或者超过核心线程的数量,那么任务会被插入到任务队列中排队等待执行。当整个线程池都处于空闲状态时,线程池中的线程(只存在非核心线程)都会因空闲超时而被停止,此时,当线程池无法执行新任务时,这可能是由于任务队列已满,或者是无法成功执行任务。如果线程池中的线程数量未达到核心线程的数量,那么会直接启动一个核心线程来执行任务。重用线程池中的线程,避免因线程的创建和销毁,所带来的性能开销。

2024-01-16 18:43:45 774

原创 Java 线程

以下这些方法都会在线程调用方法发出中断时,抛出异常。一般习惯而言,把Blocked(被阻塞)、Waiting(等待)、(计时等待)都称为阻塞状态。注意:不仅仅是Blocked。ObjectThread》 的作者当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象是线程安全的。线程安全考虑的是对一个对象的访问是不是线程安全的。get同时set;

2024-01-15 18:31:05 897

原创 Java注解技术

从JDK 5开始,Java增加了对元数据(MetaData)的支持,也就是注解(Annotation注解就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。注解提供了一种为程序元素(包、类、构造器、方法、成员变量等)设置元数据的方法,从某些方面来看,注解就像修饰符一样,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量。

2024-01-15 17:25:42 970

原创 Java反射机制

Java 反射机制的基本介绍与基础 API 的使用示例

2024-01-15 17:18:41 874

原创 CCF模拟试题 201812-1 小明上学(C语言版)

代码#include <stdio.h>#include <stdlib.h>/* 绿灯时,显示的倒计时不用处理,红灯倒计时要加上,黄灯倒计时也要加上,并且黄灯后面是红灯,所以还要加上红灯的总倒计时 */ struct Item { int flag; //0,1,2,3表示直接通行或信号灯 int time; //当前 flag对应的时间 ...

2019-08-08 17:43:17 295

原创 CCF模拟试题 201903-2 二十四点(C语言版,100')

代码#include <stdio.h>#include <stdlib.h>/*通过递归函数实现24点游戏对算术式 a ? b ? c ? d 从左到右顺序计算,因为 +,-优先级相同, x, /优先级相同; 但x,/优先级高于加减优先级所以当第1个 ? 为 +,-时先按最低优先级处理,即先不计算 a ? b。 此时,将 b 作为 第2个 ? 的左...

2019-08-02 15:08:47 1299

原创 CCF模拟试题 201903-1 小中大(C语言版, 得分:100')

代码#include <stdio.h>#include <stdlib.h>int main() { void calc(int *p, int n); int n,i; int *p; scanf("%d", &n); p = (int *)malloc(n * sizeof(int)); for(i=0; i...

2019-07-31 20:26:13 440

原创 Android-HandlerThread&IntentService

HandlerThreadHandlerThread.javapublic class HandlerThread extends Threadpublic HandlerThread(String name) { super(name); mPriority = Process.THREAD_PRIORITY_DEFAULT;}public HandlerThrea...

2019-03-23 17:45:19 143

原创 Android-AsyncTask

Android-AsyncTask基础创建AsyncTask通过AsyncTask执行线程任务AsyncTask适用于在子线程中执行任务,然后在主线程中展示任务的执行进度以及执行结果的场景。AsyncTask中封装了FutureTask线程任务,线程池和Handler。AsyncTask不适合进行特别耗时的后台任务,对于特别耗时的后台任务,建议使用线程池。创建AsyncTaskAsync...

2019-03-23 17:22:13 113

原创 Android-消息机制

Android-消息机制概述创建消息循环处理系统Android 消息机制的运作流程概述Handler是Android消息机制的上层接口,通过Handler可以轻松地将一个任务切换到Handler所在的线程中执行。Android的消息机制主要是指Handler的运行机制,而Handler的运行需要MessageQueue和Looper的支持。所以,介绍Android的消息机制主要就是介绍Ha...

2019-03-23 17:03:14 95

原创 Android线程基础

Android线程基础进程线程抢占式调度策略多线程优势多线程的应用Java提供的线程 API使用Callable和Future创建线程创建多线程的优选方式线程的生命周期控制线程的APIthread.join()后台线程(守护线程) thread.setDaemon(true)线程睡眠 Thread.sleep(long)线程池线程池的实现类 ThreadPoolExecutor 和 Schedul...

2019-03-23 12:20:48 2187

原创 Android-Activity介绍

Activity相关知识点介绍Activity常用配置属性介绍:android:exported=“true/false” : 指定该Activity是否允许被其他应用调用。true表示可以被其他应用调用。android:launchMode=“singleTask” : 指定Activity的启动模式(加载模式),支持standard(默认)、singleTop、singleTask、si...

2018-12-05 16:21:42 291

原创 Java-注解Annotation介绍

Annotation概要从JDK 5开始,Java增加了对元数据(MetaData)的支持,也就是注解Annotation;Annotation就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理(通过反射实现);Annotation提供了一种为程序元素(包、类、构造器、方法、成员变量等)设置元数据的方法,从某些方面来看,Annotation就像修饰符...

2018-11-03 23:49:22 187

原创 Java网络编程——Socket通信

Socket通信基于TCP/IP协议。TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过网络虚拟链路进行通信。Java对基于TCP/IP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。TCP/IP协议...

2018-10-26 21:52:46 336

原创 Java网络编程详解——网络基础知识介绍、IP和端口介绍、URL和URLConnection介绍

网络基础知识——计算机网络介绍、通信协议与网络结构模型一、 计算机网络就是把分布在不同地理区域的计算机与专门的外部设备,用通信线路互连成一个网络系统,从而使众多的计算机可以互相传递信息,共享资源。计算机网络通常按照规模大小和延伸范围分类,常见的划分为:局域网(LAN)、城域网(MAN)、广域网(WAN)。Internet可以视为世界上最大的广域网。二、计算机网络中实现通信必须有一些约定,...

2018-10-25 21:40:17 555

原创 Java-IO流——常用流及相关API介绍

Java中的IO流体系分类代码中字符串不同平台换行符的表示方法:Windows平台——\r\nUNIX/Linux/BSD平台——\n分类字节输入流字节输出流字符输入流字符输出流抽象基类InputStreamOutputStreamReaderWriter访问文件FileInputStreamFileOutputStreamFile...

2018-10-24 16:32:45 2842

原创 Java-IO流——File类介绍

File类概述java.io.File代表与平台无关的文件或目录。也就是说可以通过File类在Java程序中操作文件或目录。File类只能用来操作文件或目录(包括新建、删除、重命名文件和目录等操作),但不能用来访问文件中的内容。如果需要访问文件中的内容,则需要使用输入/输出流。绝对路径和相对路径、路径分隔符Windows中绝对路径以盘符开头;Linux中绝对路径以斜线/开头;不...

2018-10-23 17:02:17 3669

原创 Java反射机制

Java反射机制的概念Java反射机制是在运行状态中,对于任意一个类(即包括不同包名下的类),都能够知道这个类的所有属性和方法(即包括protected和private修饰的); 对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象(即Class对象)。而解剖使用的就是...

2018-10-20 11:09:08 147

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除