自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeakCanary原理,h5移动端开发方案

我们首先看isInAnalyzerProcess方法,看注释如果是LeakCanary进程就不允许初始化其他任务。这个进程是为LeakCanary分析堆内存用的。 我们知道引入LeakCanary在你的项目编译成功之后会自动安装一个Leaks apk。看到上面LeakCanary.install(this)这行代码,是不是安装Leaks apk?是不是Leaks通过跨进程来检测我项目呢?检测原理又是怎样的?带着这些问题,接下来看看具体做了什么事情。会调用LeakCanary#install方法 首先我

2022-03-06 17:05:28 107

原创 Lambda表达式入门(下篇),android开发网络框架

System.out.println( (Runnable)() -> {} ); // 正确我们可以定义一个无参数,无返回值的接口,类似Runnable@FunctionalInterfacepublic interface MyRunnable {public void run();}那下面的写法,都是正确的Runnable r1 = () -> {System.out.println(“Hello Lambda!”);};MyRunnable r2 = () -&

2022-03-06 17:04:03 142

原创 Kotlin学习(8)泛型,美团Android面试

class Apple : Fruit() //Apple继承Fruitclass Banana : Fruit() //Banana继承Fruitclass Grape : Fruit() //Grape继承Fruit//两个函数object GenericTypeDemo {fun addFruit(fruit: MutableList){}fun getFruit(fruit: MutableList<Fruit){}}这个时候可以这样调用

2022-03-06 17:02:38 106

原创 Kotlin学习(12)元编程,音视频基础知识书籍

annotation class AnnoX(val value: String)annotation class AnnoY(val message: Stringval annoX: AnnoX = AnnoX(“X”))2.3 处理注解如果没有相应的注解信息处理逻辑流程,那么注解可以说是废了,没有什么实用价值。首先,我们的目标测试类是:@Runclass SwordTest() {@TestCase(id = “a”)fun testCase(testId: String) {p

2022-03-06 17:01:13 88

原创 JWT在Java和Android中的使用,flutter瀑布流显示其它组件

io.jsonwebtokenjjwt0.9.1Gradle:dependencies {compile ‘io.jsonwebtoken:jjwt:0.9.1’}1.JWT生成public String JWTGenerate() {Map<String, Object> map = new HashMap<>();map.put(“claim1”, “claim1value”);map.put(“claim2”, “claim2value”);Stri.

2022-03-06 16:59:48 4235

原创 Jetpack之Room的使用,结合Flow,Android自学资料

@Database(entities = [History::class], version = 1)abstract class HistoryDatabase : RoomDatabase() {abstract fun historyDao(): HistoryDaocompanion object {private const val DATABASE_NAME = “history.db”private lateinit var mPersonDatabase: HistoryDatab

2022-03-06 16:58:23 134

原创 Java线程(六):线程池,腾讯android面试题社招

创建一个可安排在给定延迟后运行命令或者定期地执行的线程池。[java]  view plain copy print ?ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3);// 效果类似于Timer定时器每种线程池都有不同的使用场景,下面看一下这四种线程池使用起来有什么不同。FixedThreadPool[java]  view p.

2022-03-06 16:55:33 3229

原创 IOS开发之——事件处理-抽屉效果(70),复习指南

事件处理-抽屉效果——滑动处理事件处理-抽屉效果——缩放处理事件处理-抽屉效果——滑动定位事件处理-抽屉效果——定位视图复位二 事件处理-抽屉效果——界面布局2.1 界面关系DrawViewCOntroller继承UIViewController启动界面的ViewController继承DrawViewCOntroller三 事件处理-抽屉效果——滑动处理(DrawViewController)3.1 添加子控件(左、右、中三个view)(void)..

2022-03-06 16:54:08 181

原创 String、StringBuffer与StringBuilder之间区别,kotlinmvvm框架

从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问  ,比如这段代码:1  String s  =   " abcd " ;2  s  =  s + 1 ;3  System.out.print(s); //  result : abcd1我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种

2022-03-05 19:35:51 201

原创 RecyclerView实现吸顶效果项目实战(四),2021大厂Android面试题精选

setAdapterInternal 方法主要作用是将传进来的 adapter 保存到 mAdapter 变量。之后调用了 requestLayout 方法。public void requestLayout() {if (this.mEatRequestLayout == 0 && !this.mLayoutFrozen) {super.requestLayout();} else {this.mLayoutRequestEaten = true;}}requestLayo

2022-03-05 19:34:26 129

原创 PictureSelector 相册全白不显示问题,kotlin书籍推荐

}}@Overrideprotected void setResource(@Nullable Bitmap resource) {if (callback != null) {callback.onHideLoading();}if (resource != null) {boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),resource.getHeight());longImageView.setVisibi

2022-03-05 19:30:10 284

原创 offer求比较+部分大厂Android面经+真题解析,android直播原理

(我个人觉得还可以,个人还是比较喜欢搞开发的吧,但是薪资待遇方面没有上面的好)3.字节跳动 效率工程部,可能是做lark?(最近出的事情挺多,字节这个公司也算是处于风口浪尖了,很多朋友还说我这是49年入国军,但是我个人还是挺喜欢这个公司的企业精神的)4.猿辅导(这个不在求职计划内,是在软件里面收到的邀请。和负责招聘的小姐姐聊了一下,感觉薪资待遇方面还是不错的,就投了简历,约了面试)5.贝壳找房 移动端研发工程师(薪资方面就是普遍的水平吧,但是,这个方向个人还是挺喜欢的)6.网易 网易云音乐(

2022-03-05 19:28:46 5292

原创 Navigation之详细聊聊Fragment的实现原理,完美讲解内存缓存LruCache实现原理

scheduleCommit();}}该方法最终调用到scheduleCommit()方法2. FragmentManager.scheduleCommit()void scheduleCommit() {synchronized (mPendingActions) {boolean postponeReady =mPostponedTransactions != null && !mPostponedTransactions.isEmpty();boolean pendi

2022-03-05 19:27:20 353

原创 MotionLayout_ 打开动画新世界大门 (part II),retrofit动态代理原理

我们设置了 colorFilter 属性,作用相当于 tint,重新运行后,可以看到如下效果:需要我们注意的是,这里的自定义属性的 attributeName 对应的值并不一定是在 xml 布局文件中控件对应的属性名称,而是在对应控件中拥有 setter 设置的属性名称。怎么理解呢?其实归根结底 CustomAttribute 内部还是利用的反射,从下面的部分源码中就能够察觉到:public void applyCustomAttributes(ConstraintLayout constraintL

2022-03-05 19:25:55 739

原创 LeetCode(5) 括号生成,搞懂开源框架设计思想真的这么重要吗

//count1统计“(”的个数,count2统计“)”的个数public static void generate(String sublist , List list , int left, int right, int n){if(left > n || right > n) return; //左括号和括号最大不能大于nif(left == n && right == n) list.add(sublist); //刚好都等于n,则添加到lis

2022-03-05 19:24:30 51

原创 Kotlin学习(8)泛型,90%的人看完都说好

1. 在类、接口和函数上使用泛型泛型类、接口、函数都具备了复用性、类型安全以及高效等优点。1.1 泛型接口下面举一个例子:interface Generator { //类型参数放在接口名称后面operator fun next(): T //接口函数中直接使用类型T}//测试代码:fun testGenerator() {val gen = object : Generator { //对象表达式override fun next

2022-03-05 19:23:05 137

原创 Android面试:一个进程有多少个-Context-对象?看似初级的问题

2. Application 对象我们都知道,在启动四大组件(Activity、Service、ContentProvider, BroadcastReceiver)时,如果对应的进程未启动,就需要先创建进程,相应地也会创建一个Application对象。简单来说:在system_server进程,通过AMS#getProcessRecordLocked(...)获取进程信息(ProcessRecord);若不存在,则调用AMS#startProcessLocked(...)创建进程在Zygot.

2022-03-04 18:56:24 197

原创 Android面试题精选:关于-Handler-面试官问了我什么,android屏幕适配原理

系统帮我们在主线程创建 Looper 的代码:如果我们现在子线程中使用 Handler 的话,之需要模仿系统怎么创建 Looper 即可,其实就是两步,在子线程中调用 Looper.prepare() 和 Looper.loop() 即可,prepare 帮我们在对应线程创建 Looper,loop 让刚刚创建好的 Looper 运行起来。这两步完成后我们就可以在子线程中使用 Handler 了。以上所说的 Handler 使用指的是 Handler 的创建,比如在 A 线程创建后就可以在任何位置使

2022-03-04 18:54:59 56

原创 Android面试题之Broadcast Receiver篇,kotlin协程的实现原理

提示:以下是本篇文章正文内容Broadcast Receiver=================================================================================1.如何注册 BroadcastReceiver在清单文件中注册广播接收者称为静态注册,在代码中注册称为动态注册。静态注册的广播接收者只要 app 在系统中运行则一直可以接收到广播消息,动态注册的广播接收者当注册的 Activity 或者 Service 销毁了那么就接.

2022-03-04 18:53:34 306

原创 Android面试回忆录:Service有几种启动方式?,rrxjava原理

是否知道IntentService,在什么场景下使用IntentService?这也是面试官要看的点,真正的项目需要一个开发人员对某个问题有一定的深度,也需要对整个Android的知识点有一定的广度。深度代表这个人对问题认真对待有钻研的精神,广度代表这个人在面对同一个问题时,会更容易从多种可行的方案中选出最合适的一种。Service的实际项目中一直被很多人忽略,为什么我一再强调Service很重要,我们来看看,如果对Service完全无知会在工作中遇到什么问题。场景:如果一个应用要从网络上下载M.

2022-03-04 18:50:43 84

原创 Android面经分享:快手、字节跳动,Android架构师必备框架技能核心笔记

一个应用启动过程,如何与AMS,PMS交互EventBus的实现原理,粘性事件是如何实现的?为什么要用EventBus,其优势在哪里?Retrofit的实现原理结合动态代理来问Picasso与Glide的区别(缓存的差异性)Volley与Okhttp的差异性,Okhttp的实现与其优势多进程的数据库与文件操作该如何实现?Android签名,V1,V2Glide中生命周期如何实现的Glide如何加载一个Gif图对于Android中内存使用中注意的点(围..

2022-03-04 18:47:53 145

原创 Android通讯录开发之获取运营商号码段(移动、联通,人生转折

public ConfigParser(InputStream input) throws Exception {SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();parser.parse(input, this);}public void characters(char buffer[], int start, int length) {accu

2022-03-04 18:46:28 611

原创 Android进阶:三、这一次,Android实习面试经验汇总

mThread = Thread.currentThread();}代码很简单,就是创建了MessageQueue的对象,并获得了当前的线程。至此,Handler的创建已经完成了,本质上就是获得一个Looper对象和一个MessageQueue对象!###二、使用Handler发送消息Handler的发送消息的方式有很多,我们跟踪一个方法sendMessage方法一直下去,发现最后竟然调用了enqueueMessage(queue, msg, uptimeMillis),那我们看看这个方法的代码:

2022-03-04 18:43:38 252

原创 Github标星5-3K原来还有如此丧心病狂的Android混淆文件生成器?

将混淆文件导入到 proguard-rules.pro 同一目录下编辑proguard-rules.pro,添加如下内容----------------------------------------------------------------------------混淆的压缩比例,0-7-optimizationpasses 5指定不去忽略非公共的库的类的成员-dontskipnonpubliclibraryclassmembers指定混淆是采用的算法-optimizations .

2022-03-02 22:42:06 302

原创 Framework学习(十)Content Provider启动过程,双向绑定原理

String name = cursor.getString(cursor.getColumnIndex(“name”));String detail = cursor.getString(cursor.getColumnIndex(“detail”));showlog(“table_name:” + table);showlog("name: " + name);showlog("detail: " + detail);cursor.moveToNext();}cursor.close();

2022-03-02 22:39:15 156

原创 FrameWork内核解析之Handler消息机制(二),android基础面试题及答案

Message.what------------------>用来标识信息的int值,通过该值主线程能判断出来自不同地方的信息来源Message.arg1/Message.arg2----->Message初始定义的用来传递int类型值的两个变量Message.obj------------------->用来传递任何实例化对象最后通过sendMessage将Message发送出去。Handler所在的线程通过handlerMessage方法就能收到具体的信息了,如何判断信息的.

2022-03-02 22:37:50 123

原创 Framework 底层学习:一个浅显易懂的WMS介绍,2021Android常见面试题分享

我们每次创建一个Activity的时候,同样也是要添加当前Activity的View到窗口上,这个View是DecorView,同样也是通过调用addview()方法来实现。具体在ActivityRecord.java里面的handleResumeActivity来实现的。ViewRootImpl类================================================================================ViewRootImpl这个类在andro.

2022-03-02 22:36:25 561

原创 Android开发11年,分享一下我眼中程序员的三六九等,android基础考试题及答案

深入理解Android绘制原理,理解VSYNC和surface机制和窗口原理。深入理解Android动画原理,包括补间动画和属性动画。对于Android安全机制有基本认知,理解Android安全原理。深入理解端上设计范式思想,如mvc\mvp\mvvm\clean-arch等。理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。对新技术敏感(,理解掌握下一代架构dynamic feature等。如果达到这一水平,恭喜你,你已经超过70%左右的人,但是如果要再进一步,比如架构.

2022-03-01 13:48:17 77

原创 Android应用优化之最基本的UI层显示优化,android系统软件开发

| — | — | — | — || 无色 | 0X | 1 | 全屏 || 蓝色 | 1X | 2 | 大部分 || 绿色 | 2X | 3 | 局部 || 淡红色 | 3X | 4 | 小部分 || 深红色 | 4X | 大于等于5 | 无 |大家可以打开APP,找一个自己认为比较复杂的界面,然后在手机设置->开发者选项中打开过度绘制区域如:这样就可以通过颜色的判断,我们检查对应的布局代码来优化过度绘制问题。2.Layout Inspector.Android Studio有

2022-03-01 13:46:52 117

原创 android夜间模式Support Library,最新美团点评Android团队面试题

drawable文件夹放日间模式图片,drawable-night文件夹放夜间模式图片。value的color文件夹设置日间模式颜色,value-night的color文件夹设置夜间模式颜色然后在项目所有的xml配置中涉及有图片和颜色的地方,都在对应地方设置日夜间模式两种。日夜间模式切换日夜间状态有两种切换方法AppCompatDelegate.setDefaultNightMode(mode) 可以设置全局的夜间模式AppCompatDelegate.setLocalNightMode(m.

2022-03-01 13:45:27 222

空空如也

空空如也

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

TA关注的人

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