- 博客(18)
- 收藏
- 关注
原创 自定义带进度条的圆角button
自定义带进度条的圆角button1、实现效果2、代码实现public class UpdateButton extends View { private static final String TAG = "UpdateButton"; private Paint mPaint; private int mBlueColor; private int mBackGroundColor; private int mWhiteColor; priva
2021-09-02 14:14:50
202
原创 关于线程的八个常问面试题
关于线程的八个常问面试题:1、两个线程轮流打印数字,一直到100public class MyPrintNumClass { private int count = 0; private final Object lock = new Object(); /** * 两个线程轮流打印数字,一个线程负责偶数,另一个负责奇数,一直到100 * @throws InterruptedException */ public void pr
2021-09-02 12:53:49
412
原创 App启动流程详解
启动一个app的流程:1、Launcher中开启一个app —>2、Activity.startActivityForResult —>3、整个进程只会存在一个Instrumentation对象,每个Activity都会持有Instrumentation对象的引用,mInstrumentation.execStartActivity() —>4、ActivityManagerNative.getDefault() —>5、返回一个ActivityManagerProxy对象
2021-03-30 16:42:36
518
原创 什么是事件分发机制?主要用来解决什么问题?
什么是事件分发机制?主要用来解决什么问题?在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解android事件响应机制才能解决,事件响应机制已经是android开发者必不可少的知识。面试找工作的时候也是面试官经常会问的一个问题。1.涉及到事件响应的常用方法构成用户在手指与屏幕接触过程中通过MotionEvent对象产生一系列事件,它有四种状态:MotionEvent.ACTION_DOWN :手指按下屏幕
2021-03-23 00:02:38
335
原创 MVVM+DataBinding+RxJava+Retofit实现一个简单的新闻demo
MVVM+DataBinding+RxJava+Retofit实现一个简单的新闻demo引入databinding dataBinding { enabled true }引入相关依赖 //ViewModel与LiveData implementation "android.arch.lifecycle:extensions:1.1.1" // 依赖RxAndroid 2X 的依赖库 // 增加RxJava 2X 的依赖库
2021-03-22 21:56:18
285
原创 ListView和RecyclerView的区别
ListView和RecyclerView的区别:1、优化ListView优化需要自定义ViewHolder和判断convertView是否为null。 而RecyclerView是存在规定好的ViewHolder。2、布局不同对于ListView,只能在垂直的方向滚动。而对于RecyclerView,他里面的LayoutManager中制定了一套可以扩展的布局排列接口,所以我们可以重写LayoutManager来定制自己需要的布局。RecycleView可以根据LayoutManger有横向,瀑布
2021-03-22 20:03:38
8798
原创 插件化换肤思路分析
插件化换肤思路分析主要分为五步1、收集xml数据2、统计需要换肤的属性3、制作apk皮肤包4、读取皮肤包里面的皮肤5、执行换肤具体分析1、利用View的实例化流程,自定义SkinLayoutflaterFactory。2、①用SkinAttribute记录需要的属性:SkinPair记录一个属性,属性名字–对应的资源id、SkinView表示一个view对应多个属性,用一个List集合存储所有的SkinView、SkinAttribute存储一个xml对应的对个view,同样用一个List
2021-03-21 12:39:51
119
原创 2021-03-03
Android面试总结1、Handler是怎么实现的?在主线程创建的时候会创建一个Looper,同时也会在在Looper内部创建一个消息队列。而在创键Handler的时候取出当前线程的Looper,并通过该Looper对象获得消息队列,然后Handler在子线程中通过MessageQueue.enqueueMessage在消息队列中添加一条Message。通过Looper.loop() 开启消息循环不断轮询调用 MessageQueue.next(),取得对应的Message并且通过Handler.d
2021-03-03 23:40:29
145
1
原创 CAS基本原理
CAS基本原理什么是原子操作?如何实现原子操作?假定有两个操作A和B(A和B可能都很复杂),如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。实现原子操作可以使用锁,锁机制,满足基本的需求是没有问题的了,但是有的时候我们的需求并非这么简单,我们需要更有效,更加灵活的机制,synchronized关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁,这里会有些问题:首先,如果被阻塞的线
2021-01-24 23:59:39
147
原创 线程基础知识、线程之间的共享和协作
1,什么是进程和线程?进程是程序运行资源分配的最小单位线程是cpu调度的最小单位,必须依赖于进程而存在,线程无处不在2,并行与并发我们举个例子,如果有条高速公路 A 上面并排有 8 条车道,那么最大的 并行车辆就是 8 辆此条高速公路 A 同时并排行走的车辆小于等于 8 辆的时候,车辆就可以并行运行。CPU 也是这个原理,一个 CPU 相当于一个高速公路 A,核心数或者线程数就相当于并排可以通行的车道;而多个 CPU就相当于并排有多条高速公路,而每个高速公路并排有多个车道。当谈论 并发的时
2021-01-24 10:24:55
224
原创 用wait/notify实现生产者和消费者程序
采用多线程技术,例如wait/notify,设计实现一个符合生产者和消费者问题的程序,对某一个对象(枪膛)进行操作,其最大容量是20颗子弹,生产者线程是一个压入线程,它不断向枪膛中压入子弹,消费者线程是一个射出线程,它不断从枪膛中射出子弹。public class 用waitnotify实现生产者消费者问题 { public static final Integer MAX_SIZE = 20; //枪膛最大子弹容量 public static final Integer MIN_S
2021-01-23 22:12:04
178
原创 用注解+反射+动态代理实现android绑定控件和页面跳转传参
注解+反射实现android绑定控件和页面跳转传参工具类InjectUtils:public class InjectUtils { public static void injectView(Activity activity) { Class<? extends Activity> cls = activity.getClass(); //获得此类所有的成员 Field[] declaredFields = cls.getDec
2021-01-20 18:47:34
297
1
原创 @Retention注解的应用场景
@Retention注解的应用场景1,SOURCE:在源文件中有效(即源文件保留)2.CLASS:在class文件中有效(即class保留)3.RUNTIME:在运行时有效(即运行时保留)源码:APT: 在编译期能够获取注解与注解声明的类包括类中所有的成员信息,一般用于生成额外的辅助类。IDE语法检查:在android开发中,(support-annotations与androidx.annotation)中均有提供@IntDef注解,次注解的定义如下:@Retention(SOURCE)
2021-01-20 18:31:49
483
原创 java泛型常问面试题总结
java泛型常见面试题总结:1,Array中可以用泛型吗?不能2,你可以把List《String》传递给一个接受List《Object》参数的方法吗?ArrayList《String》 arrayList1 = new ArrayList《Object》();ArrayList《Object》 arrayList2 = new ArrayList,《String》();很显然不能。例如以上写法是不正确的,虽然String继承自Object,但是ArrayList《String》和ArrayLis
2021-01-19 12:20:33
676
原创 深入浅出Kotlin协程(Coroutine)
协程是什么?协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码,协程这个概念几十年前就有了,但是协程只是在近年才开始兴起,应用的语言有:go 、goLand、kotlin、python , 都是支持协程的协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。在 Android 上,协程有助于管理长时间运行的任务,如果管理不当,这些任务可能会阻塞主线程并导致应用无响应。使用协程可以大幅度的提升Andro
2020-12-03 17:12:44
843
原创 java注解的详细使用(APT、插桩、反射)
一、APT,编译时注解处理器1、概述:什么是apt:APT,就是Annotation Processing Tool的简称,就是可以在代码编译期间对注解进行处理,并且生成Java文件,减少手动的代码输入。注解我们平时用到的比较多的可能会是运行时注解,比如大名鼎鼎的retrofit就是用运行时注解,通过动态代理来生成网络请求。编译时注解平时开发中可能会涉及的比较少,但并不是说不常用,比如我们经常用的轮子Dagger2, ButterKnife, EventBus3 都在用,所以要紧跟潮流来看看APT技术
2020-12-02 15:34:14
2422
1
原创 自定义注解与元注解
自定义注解与元注解一,基础知识:元注解元注解:@Target:@Retention:@Documented:@Inherited:二、基础知识:自定义注解定义注解格式:注解元素的默认值:一,基础知识:元注解要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解:元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作
2020-12-02 00:10:09
387
原创 深入java 泛型
java 泛型详解1. 概述2. 实例分析3. 特性4. 泛型的使用4.1 泛型类4.2 泛型接口4.3 泛型通配符4.4 泛型方法4.4.1 泛型方法的基本用法4.4.2 类中的泛型方法4.4.3 泛型方法与可变参数4.4.4 静态方法与泛型4.4.5 泛型方法总结4.5 泛型上下边界5. 总结1. 概述什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似
2020-12-01 18:48:47
75
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人