- 博客(52)
- 资源 (1)
- 收藏
- 关注
原创 Android中广播的分类
文章目录一.概述一.概述在Android系统中,广播(BroadCast)是组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用.Android中的广播机制,本质上它是一种组件间的通信方式,如果是两个组件位于不同的进程之中,那么可以用Binder机制来实现,如果两个组件是在同一个进程之中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多于的.然而,广播机制确是不可替代的,他和Binder机制不一样的地方在于
2021-02-10 10:26:30
4187
1
原创 Activity出现ANR以及如何避免?
文章目录什么是ANR什么会引发ANR?如何避免ANR?什么是ANRANR:Application Not RespondingANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户展示一个对话框,这个对话框称作应用程序无响应(ANR : Application Not Responding)对话框.用户可以选择"等待"而让程序继续运行,也可以选择强制关闭.所以一个流畅合理的应用程序中不能出现ANR,而让用户每次都要处理这个对话框.因此,在程序里对响应性能的设计很重要,这样
2021-02-02 15:49:39
765
原创 Android中Activity的Context?
文章目录什么是Context?Context类结构具体创建Context的时机Context的具体使用应用与问题什么是Context?1.Context是一个抽象类,其通用实现在ContextImpl类中,以下为相关类的继承关系.2.Context:是一个访问application环境全局信息的接口,通过它可以访问application的资源和相关的类,其主要功能如下:启动Activity启动和停止Service发送广播消息(Intent)注册广播消息(Intent)接受者可以访问APK
2021-02-02 15:02:10
1728
原创 Android中Activity的启动模式?
文章目录Activity的四种启动模式Activity的四种启动模式在清单文件中声明Activity时,可以使用元素的launchMode属性指定Activity应该如何与任务关联.launchModel属性指定有关应如何将Activity启动到任务的指令,有四种1.standard(默认模式)默认,系统在启动Activity任务中创建Activity的新实例并向其传送Intent.Activity可以多次实例化,而每个实例均均可属于不同的任务,并且一个任务可以拥有多个实例.2.singl
2021-02-02 11:22:57
154
原创 40.最小的K个数
题目描述(剑指Offer40)输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。示例1输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]public class Jzof40 { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer&
2021-02-02 09:52:01
70
原创 Activity异常被关闭的两种情况
文章目录Activity异常关闭的两种情况如何使得activity不被重新创建?Activity异常关闭的两种情况情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建,当程序启动时系统就会根据当前设备的情况去加载合适的Resource资源,比如说横屏手机和竖屏手机会拿到两张不同的图片(设定了landscape或者portrait状态下的图片).比如说当前activity处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了变化,在默认情况下,Activity就会被销毁并且重新创建,当然我们
2021-02-01 18:42:47
1561
原创 Android中onSaveInstanceState与OnRestoreInstanceState?
文章目录1.onSaveInstanceState和onRestoreInstanceState的作用2.onSaveInstanceState什么时候调用3.onRestoreInstanceState()什么时候调用4.onSaveInstanceState方法的默认实现1.onSaveInstanceState和onRestoreInstanceState的作用Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,他们不同
2021-02-01 16:15:43
224
原创 Android中典型情况下Activity的生命周期?
文章目录活动的生命周期活动在其生命周期的四种状态两个问题?首先明确Activity是什么?Activity是一个Android的应用组件,它提供屏幕进行交互,每个Activity都会获得一个用于绘制其他用户界面的窗口,窗口可以充满屏幕也可以小于屏幕并浮动在其他窗口之上.一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity.当然Activity之间可以进行互相跳转,以便执行不同的操作,但是系统会在堆
2021-02-01 15:05:30
206
原创 31.栈的压入,弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 是该压栈序列对应的一个弹出序列,但 4,3,5,1,2 就不可能是该压栈序列的弹出序列。public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if (pushA.length == 0
2021-02-01 11:37:07
105
原创 30.包含min函数的栈
题目描述(剑指Offer30)实现一个包含 min() 函数的栈,该方法返回当前栈中最小的值。public class Solution { private Stack<Integer> dataStack = new Stack<>(); private Stack<Integer> minStack = new Stack<>(); public void push(int node) { dataStack.p
2021-02-01 11:34:53
74
原创 09.用两个栈实现队列
题目描述(剑指Offer09)用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.p
2021-02-01 11:31:58
104
原创 Android中用到设计模式的例子?
文章目录1.AlertDialog、Notification源码使用了建造者模式完成参数的初始化2.安卓应用主题是抽象工厂模式的最好体现3.OKHttp内部采用责任链模式来完成每个interceptor拦截器的调用4.RxJava的观察者模式5.ListView/GridView的适配器模式6.Context外观模式1.AlertDialog、Notification源码使用了建造者模式完成参数的初始化优点:1.良好的封装性,隐藏内部实现细节2.建造者独立,容易拓展缺点:会产生多于的Buil
2021-02-01 10:59:01
244
原创 Java中的设计模式有哪几种?
文章目录单例模式工厂设计模式工厂方法模式:抽象工厂模式建造者模式(Builder)适配器模式Java中一般认为有23种设计模式。总体来说可以分为三大类:1.创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。2.结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。3.行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。单例模式
2021-02-01 10:12:55
356
原创 设计模式的六大原则?
文章目录单一职责原则接口隔离原则里氏替换原则依赖倒置原则迪米特法则开闭原则单一职责原则有且只有一个原因会引起类的变化,即是说,一个类只会对一个职责内的事情负责。比如说权限类,那么他只负责权限内的所有事情,其他登录或者角色等相关的一些东西他不会干涉,也不要把权限的事情放到其他的类里面。一定要记住,手不要伸的太长,否则的话,相关的代码分散到系统的各个地方,维护的代码实在太多,随着你系统的扩张,维护的代码也会呈几何增长。想象下中医药房,每个抽屉只放了一种药材,抓方子的时候很方便,直接抓起来称重量就可以了,如
2021-01-29 16:58:10
241
原创 50.第一个只出现一次的字符位置
题目描述(剑指Offer50)在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例1输入"google"返回值4额,首先自己写的(>==<)public static int FirstNotRepeatingChar(String str) { Map<Character,Integer> map = new Lin
2021-01-29 11:13:40
107
原创 29.顺时针打印矩阵
题目描述(剑指Offer29)输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字例如,如果输入如下4 X 4矩阵: 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.public class Jzof29 { public ArrayList<Integer> printMatrix(int [][] matrix) { Array
2021-01-29 10:41:13
85
原创 05.替换空格
题目描述(剑指Offer5)请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Jzof05 { public static String replaceSpace(StringBuffer str) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s
2021-01-29 10:09:03
96
原创 03.数组中的重复数字
题目描述(剑指Offer3)在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。示例Input:{2, 3, 1, 0, 2, 5}Output:2首先放一个时间复杂度 O(N),空间复杂度 O(1)的方法,因为数字范围是[0,n-1],就把数字放在它该去的地方,若某个地方已经存在了这个数字,则它是重复的。。public boolean duplicate(in
2021-01-29 09:49:32
131
原创 04.二维数组中的查找
题目描述(剑指Offer4)在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例1输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返回值true代码:public class Jzof04 { public boolean Find(int target, int [][] arr
2021-01-29 09:36:32
108
原创 java实现生产者消费者模式
文章目录为什么要使用生产者和消费者模式什么是生产者消费者模式多生产者和多消费者场景线程池与生产者消费者模式为什么要使用生产者和消费者模式生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三
2021-01-28 16:34:17
1261
原创 对ReentrantLock的认识?
文章目录概述功能整体结构概述顾名思义,ReentrantLock是重入锁。它实现了Lock接口,是基于AQS(一种用于构建同步器的框架)构造出来的一种同步器。功能同synchronized一样,ReentrantLock也是可重入的,与synchronized相比增加了一些高级功能,主要有以下三项:等待可中断、可实现公平锁、锁可以绑定多个条件等待可中断:是指当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。可中断特性对处理执行时间非常长的同步块很有帮助。公平锁
2021-01-28 15:42:15
163
原创 什么是公平锁&非公平锁&区别?
文章目录公平锁非公平锁公平锁多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量下降会很多,队列里面除了第一个线程,其他线程都会阻塞,cpu唤醒阻塞线程的开销会很大。非公平锁多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。优点:可以减少cpu唤醒线程的开销,整体的吞吐率会高点,cpu也不必唤醒所有线程,会减少唤醒线程的数量缺点:可能导致
2021-01-28 14:54:21
320
转载 idea查看所有接口的实现类及树状图
查看所有的实现类在某个接口或者实现类上 Ctrl + h查看接口的实现类图选中某个接口右键 -> Diagrams(show Diagrams) -> 再出来的图上选中某个接口右键 ->show Implementations ->出来的框框Ctrl + A ->Enter结果:...
2021-01-28 14:37:16
2061
原创 如何保证线程数据安全问题?
文章目录一、不可变(final)二、线程封闭三、同步悲观锁非阻塞同步(乐观锁)四、工具类总结首先看一张图片一、不可变(final)在Java语言中,不可变的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再采取任何的线程安全保障措施。final关键字修饰的类或数据不可修改,可靠性最高。如String类,Integer类。二、线程封闭把对象封装到一个线程里,只有一个线程能看到这个对象,那么这个对象就算不是线程安全的,也不会出现任何线程安全方面的问题。线程封闭有三种:Ad-h
2021-01-28 14:19:29
576
3
原创 Timer和ScheduledThreadPoolExecutor的区别?
文章目录Timer和ScheduledThreadPoolExecutor的区别Timer和ScheduledThreadPoolExecutor的区别两者都可以完成任务的定时执行,但是,阿里巴巴推荐使用定时线程池ScheduledThreadPoolExecutor,为什么呢?先看一段代码 Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override
2021-01-28 09:50:28
230
原创 有关Java中线程池的问题
文章目录一、线程池二、线程池的优势三、什么时候使用线程池?四、线程池架构图五、线程池的五种状态六、ThreadPoolExecutor默认线程池七、线程池七大参数八、线程池的工作原理九、线程池抛异常会如何?十、execute的执行流程十一、ScheduledThreadPoolExecutor定时线程池十二、定时线程池的三种任务提交方式,以及区别一、线程池“线程池”,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行
2021-01-27 18:44:16
548
原创 线程死锁的原因&如何避免死锁
文章目录线程死锁的现象线程死锁的四个条件避免死锁的方法线程死锁的现象两个或者两个以上的线程在执行过程中,因资源争夺而造成的互相等待的现象,在无外力作用的情况下,这些线程会一直互相等待而无法继续运行下去。线程死锁的四个条件互斥条件资源只能被一个线程占用,如果其他线程请求获取该资源,则请求者只能等待,直到占用资源的线程释放该资源请求并持有条件指一个线程已经持有了至少一个资源,但又提出了新的资源请求,而新的资源已被其他线程占用,所以当前线程会被阻塞,但阻塞的同时不释放自己获取的资源不可剥夺条件
2021-01-27 15:24:33
363
原创 java中有关集合(容器)的问题整理
整理了下有关Java集合有关的面试问题1.Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已近经历了很久。它还包括在Java并发包中,阻塞接口以及他们的实现。集合框架的部分优点如下:1.使用核心集合类降低开发成本,而非实现我们自己的集合类2.随着使用
2021-01-27 13:55:52
123
原创 NIO/BIO/AIO三者的区别?
文章目录NIO/BIO/AIO是什么?区别IO按照方向和数据类型划分能划分为那些数据流Java中IO流分为几种?NIO/BIO/AIO是什么?BIO:同步阻塞IO Block IO,举个例子:我现在上厕所 现在厕所的坑已经满了,我什么事情都不做,我就在哪儿一直等着(主动观察)那个坑没人了,我就立马去占坑NIO:同步非阻塞IO Non-Block IO,举个例子:我现在上厕所,现在厕所的坑已经满了,这时候我不会像之前一样 ,我会出去抽只烟,或者微信摇一摇,然后我会时不时去厕所主动看看,看看有没有人走
2021-01-26 15:32:15
165
转载 接口与抽象类的区别
文章目录概述接口与抽象类的区别总结:概述一个软件设计的好坏,很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观业务的抽象框架,当代表业务逻辑的高层抽象层结构合理时,底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发一个相近的项目时,你以前的抽象层说不定还可以再次利用。面向对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用。Java接口(interface)和Java抽象类(abstract class)代表的就是抽象类型,就是我们需
2021-01-26 14:56:00
107
原创 LeetCode1556
给你一个整数 n,请你每隔三位添加点(即 “.” 符号)作为千位分隔符,并将结果以字符串格式返回。示例 1:输入:n = 987输出:“987”示例 2:输入:n = 1234输出:“1.234”示例 3:输入:n = 123456789输出:“123.456.789”示例 4:输入:n = 0输出:“0”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/thousand-separator著作权归领扣网络所有。商业转载请联系
2021-01-26 11:47:42
147
原创 什么是重载&什么是重写&区别
文章目录重载重写区别重载重载(OverLoad)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定使用那个方法的多态性)。上图为Android中的一个重载例子。重写重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方
2021-01-26 11:02:41
3645
原创 Java中面向对象的特征
文章目录封装继承多态多态的实现Java实现多态有三个必要条件:继承,重写,向上转型实现形式:继承和接口抽象封装封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的"高内聚,低耦合",防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰,更为有力。面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块中”,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。把握一个
2021-01-26 10:27:48
93
原创 算法练习LeetCode242
242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-anagram著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解决:public
2021-01-26 09:20:27
83
原创 面向对象&面向过程&区别?
文章目录一、面向对象与面向过程的区别二、面向对象的特点三、面向对象与面向对象的优缺点一、面向对象与面向过程的区别面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、
2021-01-25 17:04:00
183
原创 JDK&JVM&JRE
文章目录JDK&JVM&JRE分别是什么以及他们的区别?JVMJREJDK为什么JAVA可以跨平台?JDK&JVM&JRE分别是什么以及他们的区别?如果从数学的角度来看,那么JDK>JRE>JVMJVMjvm:java虚拟机,顾名思义——虚拟的机器 虚拟机,之所以称为虚拟机,是因为他实际上不存在,他是一个规范,提供一个java字节码可以运行的环境,它也可以运行其它语言编写的编译成java字节码的程序 jre, jdk,jvm依赖于平台~因为每个操作系统的配
2021-01-25 16:41:36
157
原创 什么是进程,什么是线程?
文章目录什么是进程?什么是线程?为什么要有线程?进程与线程的区别?进程与线程选择取决条件?什么是进程?什么是线程?进程:进程是并发执行程序在执行过程中资源分配和管理的基本单位(资源分配的最小单位)。进程可以理解为一个应用程序的执行过程,应用程序一旦可执行,就是一个进程。每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。线程:程序执行的最小单位。为什么要有线程?每个进程都有自己的地址空间,即进程空间。在网络或多用户换机下,一个服务器通常
2021-01-25 16:19:25
463
原创 什么是操作系统?
文章目录对操作系统的认识从两种应用层和内核层视角对操作系统的理解应用层视角底层视角操作系统视角另一方面,操作系统还起到了一种承上启下的作用操作系统的层次结构应用软件Kernel-操作系统内部组件OS kernel的特征对操作系统的认识很多书本上对操作系统都有相应的定义,但它却很难有一个精确的定义。操作系统是一个复杂的软件,它的外沿边界很难有一个精确的确定。但我们可以从功能来划分什么是操作系统,从而对操作系统是一个什么样的软件有一个更深入的理解。从两种应用层和内核层视角对操作系统的理解应用层视角用
2021-01-25 15:44:09
1140
3
转载 Android Camera2 开发相机,实现拍照,预览,录像等功能
文章目录布局文件请求有关权限加载布局,设置surface。避免画面拉升等问题学习Camera2 时,开发一个简单自定义相机。具体流程看代码布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation
2020-12-31 17:04:43
5862
10
原创 Litepal的简单使用
文章目录简单查询连缀查询如何删除如何修改如何添加一条数据LitePal在查询方面提供了非常丰富的API,本文记录了如何使用litepal进行数据库操作,怎么配置就不说了。简单查询查询user表中id为1的这条记录,同时也可以同时传递多个id,或者一个数组User user = Litepal.find(User.class, 1);List<User> userList = Litepal.findAll(User.class, 1, 3, 5, 7);//传递一个数组 l
2020-12-24 16:48:53
1013
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人