- 博客(22)
- 收藏
- 关注
原创 android studio打开新项目时注意事项
(1)随便打开一个自己的安卓工程,复制build.gradle里面的gradle版本,把目标项目的build.gradle(Project级别的)里面的gradle版本改成自己的版本,比如:classpath 'com.android.tools.build:gradle:3.5.2'(2)把目标项目里的build.gradle(Moudle级别)里面的compileSdkVersion、targetSdkVersion、minSdkVersion改成自己的版本,比如:(注意一个工程里面可能有多个Mo
2021-01-11 15:22:41
1084
原创 android 网络请求问题
在请求网络时出现网络连接错误:考虑两个问题:(1)是否有在清单文件里声明网络访问权限 <!--连接网络--> <uses-permission android:name="android.permission.INTERNET" /> <!--用于管理监听网络状态的变化--> <uses-permission android:name="android.permission
2021-01-11 14:15:41
187
原创 butterknife 配置与简单实用
第一步:配置依赖 全局的 build.gradle(app)加上如下:implementation 'com.jakewharton:butterknife:10.2.1'annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'在build.gradle(app)的android{}中加入以下代码:compileOptions { sourceCompatibility JavaVersion.VERSION
2021-01-06 14:26:38
240
原创 手写Rxjava 装饰器模式
1.抽象观察者/** * 抽象观察者 * @param <T> */public interface Observer<T> { //用于订阅成功的回调 void onSubscribe(); //收到消息 void onNext(T t); //出错的回调 void onError(Throwable e); //从订阅到消息全部发送成功 void onComplete();}2.抽象被观察者publ
2020-12-23 15:26:30
222
原创 Android recovery
(1) Main system:用boot.img启动的Linux系统,Android的正常工作模式。(2)Recovery:用recovery.img启动的Linux系统,主要是运行Recovery程序。(3)Bootloader:除了加载、启动系统,还会通过读取flash的MISC分区获得来自Main system和Recovery的消息,并以此决定做何种操作。 在Recovery的工作流程中,上述三个实体的通信必不可少。通信的接口有以下两
2020-12-16 18:16:55
354
原创 Serializable和Parcelable
什么是序列化? 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。什么时候需要实现序列化Serializable? 一般来说你的对象需要网络传输或者持久化(对象直接转换为字节的形式传输),只要你的对象需要转换为字节的形式那么你的
2020-12-01 12:07:28
73
原创 java Lock(与synchronized作比较)
文章目录一、synchronized的缺陷二、java.util.concurrent.locks包下常用的类1.Lock2.ReentrantLock3.ReadWriteLock4.ReentrantReadWriteLock5.Lock和synchronized的选择三、锁的相关概念介绍1.可重入锁2.可中断锁3.公平锁4.读写锁一、synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置
2020-11-26 10:10:23
92
原创 String StringBuffer和StringBuilder
StringBuffer:线程安全、执行速度慢StringBuilder:线程不安全、执行速度快多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。小结:(1)如果要操作少量的数据用 String;(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。具体参考:图析:String,StringBuffer与StringBuilde
2020-11-25 17:11:25
60
原创 java synchronized解析
synchronized在使用上有3种用法: 1.静态方法加关键字 2.实例方法(即普通方法)加关键字 3.方法中使用同步代码块区别:前两种方式最为偷懒,第三种方式比前两种性能要好。synchronized从锁住的是谁的维度来看一共有两种情况: 1.锁住类 
2020-11-25 16:42:33
67
原创 9. 回文数(简单)
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例:输入: 121输出: true输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。分析: 映入脑海的第一个想法是将数字转换为字符串,并检查字符串是否为回文。但是,这需
2020-11-19 10:56:39
86
原创 7. 整数反转(简单)
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 :输入: 123输出: 321输入: -123输出: -321输入: 120输出: 21分析:我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。如果构建出来的整数大于Integer.MAX_VALUE或者小于Integer.MIN_VALUE则直接返回0。代码:public int reverse(int x) { int n = 0
2020-11-19 10:21:26
130
原创 328. 奇偶链表
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL解析:public ListNode oddEvenList1(ListNode
2020-11-13 10:05:00
65
原创 两数相加
题目描述 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解
2020-11-12 14:21:22
65
原创 两数之和
一、问题描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。二、解决方法(1)暴力解决//双重循环 循环极限为(n^2-n)/2 public static int[] twoSum(int[] nums, int target) { int[] result = new int[
2020-11-12 11:36:16
77
原创 Android MVP
为什么要使用MVP架构? MVC在Android中的缺陷:Activity要处理View层,又要处理Model层,并且Activity并不是一个标准的MVC中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受来自用户的操作请求进而做出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致Activity变的庞大臃肿。 MVP解决了MVC中
2020-10-13 21:48:12
113
1
原创 MVP框架两种实现方式
第一种MVP:MVP框架: View层:BaseActivity/** *让子类去实例化Presenter层 */public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements View.OnClickListener { public P mPresenter; @Overr
2020-10-13 21:47:01
359
1
原创 Android Binder AIDL解析
Android多进程 当代智能手机的运行内存大多是6G、8G、12G,运行内存已经很大了, 为什么还会出现OOM呢? 这是因为在安卓中每一个APP都会运行在一个独立的虚拟机中,这个独立的虚拟机的内存的大小是由系统指定的,一般虚拟机内存大小是32M、48M、64M,当遇到一些内存消耗较大的操作(比如加载图片)时,可能会出现内存不足的情况。在安卓中每一个进程对应一个虚拟机实例,使用多进程的方式
2020-10-09 19:35:14
139
原创 AIDL使用
一.新建一个项目AIDLservice,创建Person类并继承Parcelable接口。public class Person implements Parcelable { private String name; private int grade; public Person(String name ,int grade){ this.name = name; this.grade = grade; } protected P
2020-10-08 18:33:29
2602
3
原创 AIDL踩坑
直接创建Person.aidl会报错: 解决方法:先随便起一个名字,比如创建一个Person1.aidl文件,然后再将该文件rename为Person.aidl。
2020-10-08 16:44:40
219
原创 Android Handler解析和相关问题
Handler解析Handler工作流程(1)通过sendMessage将Message存入MessageQueue:Handler.sendMessage(Message msg) ->Handler.sendMessageDelayed(Message msg,long delayMillis) ->Hand
2020-10-07 21:50:05
209
原创 Android ImageView用法(xml)
Android ImageView用法ImageView继承自Viewandroid:background 设置图片android:src 设置图片background和src都可以设置图片,它们之间的区别:background指的是背景,src指的是内容。在使用src填入图片时,是按照图片大小直接填,不会改变图片的大小,而使用background,则会根据ImageView给定的宽度进行拉伸。 当使用src
2020-08-12 21:10:15
1661
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人