- 博客(60)
- 资源 (8)
- 收藏
- 关注
原创 ArkTS UI开发规范的常用装饰器
@Component 可以装饰struct。结构体(struct)在被装饰后具有基于组件的能力,需要实现build方法来更新UI。@Entry 可以装饰struct。组件在被装饰后会作为页面的入口组件,页面加载时将被渲染显示。@Preview 可以装饰struct。 如果自定义的组件被@Preivew装饰,则可以在DevEco Studio 的预览器中进行预览。@CustomDialog 可以装饰struct。用于装饰自定义弹窗。@Observed 装饰class。类被装饰后,该类中的数据变更将被
2024-06-03 22:02:00
501
原创 UIAbility的启动模式
当应用的UIAbility实例已经被创建,并且配置为指定实例模式时,如果再次调用startAbility()方法启动该UIAbility实例,且AbilityStage的onAcceptWant()回调匹配到一个已经创建的UIAbility实例,则系统会启动原来的UIAbility实例,并且不会重新创建一个新的UIAbility实例。对于文档应用,用户从文档应用中打开一个文档内容,回到文档内容,继续打开同一个文档,希望打开的还是同一个文档内容。以如下步骤所示进行举例说明。
2024-06-03 18:51:09
954
原创 UIAbility的生命周期
WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在UIAbility中管理UI界面功能的两个生命周期回调,从而实现UIAbility与窗口之间的弱耦合。UIAbility类提供了很多回调,通过这些回调可以知晓当前UIAbility的某个状态已经发生改变:例如UIAbility的创建和销毁,或者UIAbility发生了前后台的状态切换。当用户浏览、切换和返回到对应应用的时候,应用中的UIAbility实例会在其生命周期的不同状态之间转换。
2024-05-28 14:04:08
1980
1
原创 Jetpack学习之Room数据库的注解
慕课网-jetpack实战课程笔记room数据库众多注解Room是Google为了简化旧式的SQLite操作专门提供的。1.拥有SQLite的所有操作功能;2.使用简单(类似于Retrofit库),通过注解的方式实现相关功能。编译时自动生成实现类Impl3.LiveData,LifeCycle,Paging天然融合,支持在module的build.gradle文件里定义工程的缓存目录a...
2020-04-24 22:23:47
1974
原创 android内存--强弱软虚
为什么要进行内存优化?.app运行内存限制,OOM导致app崩溃;app流畅性、相应速度和用户体验和内存息息相关。 android的内存管理方式:android系统内存分配与回收方式:每个app对应一个linux进程,在一个虚拟机下运行。 cmd ->adb shell 命令行模式下用ps命令可以看到所有正在运行的进程。GC只在Heap剩余空间不够时才出发进行垃圾回收。app内存...
2018-04-27 16:31:09
532
原创 android动画2--属性动画
属性动画Animator操作属性的getset方法来改变属性,画出动画效果。 实现Animation框架的功能。 位移和旋转: public void move(View view){ ObjectAnimator.ofFloat(mImageView,"translationX",0,200f).setDuration(1000).start(); ...
2018-04-26 22:03:26
265
原创 Kotlin程序结构---变量常量、函数、lambda表达式
val相当于java中的被Final关键字修饰的常量 val:值类型 = value 不可以被重复赋值。 运行时常量:val x = getX() 编译期常量:const val x = 2var是变量 var x:值类型 = value 或者用类型推导 var x = “helloworld” //定义变量并初始化 x = “hiworld” //再次赋值 类型推导:变...
2018-04-26 21:36:57
262
原创 Kotlin数据类型--空类型、智能类型、包、区间、数组
空类型和智能类型转换 字符串被设定为不能为null。例如:fun getName():String{ return null;}上面这样的代码段编译不会被通过,提示字符串不能被返回空值。 因此,下面一小段代码是空指针安全的。fun main(args:Array<String>){ println(getName().length)}如果...
2018-04-24 23:17:15
508
原创 Kotlin数据类型--布尔,数字,字符,字符串,类
Kotlin中有两个关键字var和val,用来定义变量。 var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。Boolean类型val aBoolean:Boolean = trueval bB...
2018-04-20 23:40:34
1270
原创 android动画1
android中的动画包括以下几类:系统不断的调用onDraw方法重绘页面。 Tween Animation 变换动画 Frame Animation 帧动画 Layout Animation 布局动画 Property Animation 属性动画 另外还有矢量图动画、轨迹动画等。 一、 Tween Animation 变换动画 alpha:渐变透明度;Scale:渐变尺寸缩放动画...
2018-04-18 21:48:55
185
原创 自定义控件1
为什么要自定义控件?1做特定的显示风格;2处理特有的用户交互,例如实现可滑动的textView;3优化布局,例如把title抽出来;4封装,复用,例如多项选择框等 自定义控件的步骤:1.自定义属性的声明与获取;2测量onMeasure方法;3,布局onLayout(ViewGroup);4,绘制,onDraw;5,onTouchEvent;6,onInterceptTouchEvent(View...
2018-04-17 22:40:17
137
原创 java设计模式--观察者模式
观察者模式定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者:Observer update() 被观察者(目标):Subject attach();Detach();notify() 1. 目标与观察者的关系:典型的一对多 2. 单向依赖: 3. 命名建议 4. 触发通知的时机:完成消息处理后触发通知 5. ...
2018-04-17 18:56:45
211
原创 java设计模式--适配器模式
适配器模式:将一个类的接口,转换成客户期望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 适配器模式的构成: 通过包装Adapter把adaptee转换为客户需要的Target。 对象适配器/** * 三相插座接口 */public interface ThreePlugIf { public void powerWithThree();...
2018-04-16 11:42:57
154
原创 java设计模式--单例模式---线程安全的懒汉式
设计模式是一套被反复使用、多数人知晓的经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性。在开发过程中,有些对象,我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等。这些对象如果被创造出了多个实例,就会导致许多问题,例如占用过多资源,读写文件不一致等。 怎么保证整个应用中某个实例有且只有一个?—-单例模式 单例模...
2018-04-15 20:06:14
861
原创 java并发--生产者消费者模型---volatile关键字
生产者消费者模型:系统中包含生产者和消费者两种角色,通过内存缓冲区进行通信。生产者生产消费者需要的产品,消费者把产品取出消费掉。 生产者===》 ====》消费者 生产者===》内存缓冲区(存放资源)====》消费者 生产者===》 ...
2018-04-09 22:21:00
620
原创 java中的多线程+手写死锁+线程池
java线程的基本方法:Thread类,Runnable接口。 线程的创建方法:Thread();Thread(String name);Thread(Runnable target);Thread(Runnable target,String name); 启动线程的方法:void start(); 线程休眠的方法:static void sleep(long millis); stati...
2018-04-09 18:14:19
735
原创 剑指offer19---顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. int a[][] = { {1, 2, 3, 4, 5, 6}, ...
2018-04-06 21:42:34
149
原创 剑指offer18--二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10...
2018-04-06 21:10:38
231
原创 剑指offer17---树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 要查找树A中是否存在和树B结构一样的子树,我们可以分成两步: 1.在树A中找到和B的根结点的值一样的结点R; 2.判断树A中以R为根结点的子树是不是包含和树B一样的结构。 public static boolean HasSubtree(TreeNode root1, TreeNode r...
2018-04-06 20:15:23
194
原创 剑指offer16---合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { ...
2018-04-06 18:34:55
153
原创 剑指offer15---反转链表
输入一个链表,反转链表后,输出链表的所有元素。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.Stack;public class Solution {...
2018-04-06 18:32:39
139
原创 剑指offer14--输出链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。 简单粗暴的用另一个链表存储输入链表的逆序,然后返回逆序的第K个结点。public class ListNode { int val; ListNode next = null; ListNode(){} ListNode(int val) { this.val = val; }} pu...
2018-04-06 16:00:10
140
原创 剑指offer13--调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 简单粗暴的用空间换时间: public static int[] reOrder(int[] array) { int length = array.length; if (lengt...
2018-04-06 07:49:22
132
原创 剑指offer12--数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 主要考虑负数次方的情况。public double Power(double base, int exponent) { double result = 1; if (exponent >= 0) { for (in...
2018-04-06 07:07:06
136
原创 剑指offer11--二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 概念: 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +7 ,计算机字长为8位,转换成二进制就是00000111。如果是 -7,就是 10000111 。 那么,这里的 00000011 和 10000...
2018-04-05 20:30:00
215
原创 剑指offer10----矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 关于分治法 分治法,分而治之。就是将原问题划分为n个规模较小,结构与原问题类似的小问题进行处理,递归地解决这些问题,然后再合并求解的过程。 分治法在解决的流程上分为三个步骤: 1.分解:将原问题划分为n个规模较小,结构与原问题类似的小问题。 ...
2018-04-05 20:16:05
187
原创 剑指offer9--变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。1.f(1) = 1;f(0) = 02.f(2) 会有两种跳的方式,一次1阶或者2阶,这回归到了问题f(1),f(2) = f(2-1) + f(2-2)3.f(3) 会有三种跳得方式,1阶、2阶、3阶,那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3...
2018-04-05 20:13:01
106
原创 剑指offer8 ----跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 假设,一级台阶,有f(1)种方法,二级有f(2)种,以此类推,n级有f(n)种方法。可以看出,f(1)=1;f(2)=2。那么,假设n级台阶,那么第一步就有两种情况,跳一步,跟跳两步。情况一:跳一步,那么接下去的就是f(n-1); 情况二:跳两步,那么接下去的就是f(n-2)。 所以总数是...
2018-04-05 20:09:09
161
原创 剑指offer7---斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39public class Fibonacci { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int i = sc.nextInt(); ...
2018-04-05 19:18:27
236
原创 剑指offer6--旋转数组的最小数字----二分查找
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。简单粗暴的遍历 private static int minNumberInRotateArray(int[] ...
2018-04-05 18:57:20
176
原创 剑指offer5--用两个栈来实现一个队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;/*思路:用stack1来实现队列的push操作,用stack2来实现队列的pop操作,当stack2为空时,将stack1的数据全部压入stack2,等待队列的pop操作。*/public class Solution { Stack<I...
2018-04-05 16:19:54
113
原创 剑指offer4--重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * int val; ...
2018-04-05 16:12:45
170
原创 剑指offer3--逆序打印链表
输入一个链表,从尾到头打印链表每个节点的值。/** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.u...
2018-04-05 16:05:32
126
原创 剑指offer2--替换空格--java--StringBuffer
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 String一旦初始化,无法改变。 使用StringBuffer,是因为牛客网的模板。 实际使用中,单线程建议是用StringBuilder,因其无锁,效率高。 多线程中,使用StringBuffer。 public stat...
2018-04-05 16:01:32
103
原创 HTTP请求和响应报文详解
Http请求报文由三部分组成:请求行、请求头、请求体。 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。 ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,androi...
2018-04-02 15:51:22
1083
原创 Anr&Oom学习
什么是Anr? Application not responding 引起Anr的原因? 主线程被IO操作阻塞 主线程里存在了耗时计算 5s内没有响应用户输入事件 10s内广播接收器没有处理完毕 20s内服务没有处理完毕 Android中哪些操作是在主线程? Activity的所有生命周期回调都在主线程中执行 Service默认在主线程中执行 BroadcastReceive...
2018-04-01 19:00:02
227
转载 RecyclerView和ListView的对比
RecyclerView和ListView布局效果的对比: Android默认提供的RecyclerView支持线性布局,网格布局,瀑布流布局三种。通过布局管理器来控制布局效果。 RecyclerView和ListView常用API对比: ListView 的基础使用大家再熟悉不过,其使用的关键点主要如下: 继承重写 BaseAdapter 类 自定义 ViewHolder 和 conv...
2018-04-01 17:35:45
316
转载 protobuf格式的java使用
Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式。不同于XML、JSON等的数据格式,protobuf直接将用户数据序列化成了二进制数据,这从本质上决定了它的性能优势,也是目前大家选择它的一个重要原因,特别是当对传输效率要求较高的情况下。 目前主要有两个大版本:proto2 和 proto3。 其中 proto2 支持 Java、...
2018-04-01 10:41:21
892
原创 android线程间通信机制5---IntentService
IntentService就是一个自身含有消息循环的Service,内部封装了一个消息队列和一个HandlerThread。 onHandleIntent方法运行在它的消息队列线程中。
2018-03-30 19:23:42
222
android激活系统设备管理器之一键锁屏
2016-10-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人