安卓 每日一题 2020年1月问题及答案 转载

最新 文章连接,本文不再同步

Android 1月2日题:SharedPrefrences的apply和commit有什么区别?

答案:apply没有返回值而commit返回boolean表明修改是否提交成功。

apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘.

Android 1月3日题:SurfaceView和View的区别?

答案:View需要在UI线程对画面进行刷新,而SurfaceView可在子线程进行页面的刷新

SurfaceView在底层已实现双缓冲机制,因此SurfaceView比View更适用于需要频繁刷新、刷新时数据处理量很大的页面(如视频播放界面)


Android 1月6日题:常用设计模式有哪些?

答案:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。


Android 1月7日题:OkHttp与Retrofit 的区别与联系是怎样的?

答案:OkHttp和Retrofit都是目前流行网络开源框架

封装不同:

Retrofit封装了具体的请求,线程切换以及数据转换。

retrofit通过使用代理,外观,策略模式对okhttp进行了封装

OkHttp 是基于Http协议封装的一套请求客户端

职责不同:

Retrofit主要负责应用层面的封装,面向开发者,方便使用,比如请求参数,响应数据的处理,错误处理等等。

OkHttp主要负责socket部分的优化与封装,比如网络访问,多路复用,buffer缓存,数据压缩等等。


Android 1月8日题:你是如何理解Java中强引用、软引用、弱引用以及虚引用?

答案:(1)强引用:一般的Object obj = new Object() ,就属于强引用。

(2)软引用:一些有用但是并非必需,用软引用关联的对象,系统将要发生OOM之前,这些对象就会被回收。

一个程序用来处理用户提供的图片。如果将所有图片读入内存,这样虽然可以很快的打开图片,但内存空间使用巨大,一些使用较少的图片浪费内存空间,需要手动从内存中移除。如果每次打开图片都从磁盘文件中读取到内存再显示出来,虽然内存占用较少,但一些经常使用的图片每次打开都要访问磁盘,代价巨大。这个时候就可以用软引用构建缓存。

(3)弱引用:一些有用(程度比软引用更低)但是并非必需,用弱引用关联的对象,只能生存到下一次垃圾回收之前,GC发生时,不管内存够不够,都会被回收。

注意:软引用 SoftReference和弱引用 WeakReference,可以用在内存资源紧张的情况下以及创建不是很重要的数据缓存。当系统内存不足的时候,缓存中的内容是可以被释放的。实际运用(WeakHashMap、ThreadLocal)

(4)虚引用(幽灵引用),作用只是GC回收时得到一个通知


Android 1月9日题:android classloader使用的双亲委托机制是什么?

答案:双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。这里类加载器之间的父子关系一般不会以继承(Inheritance)的关系来实现,而是都使用组合(Composition)关系来复用父加载器的代码。

双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。


Android 1月10日题:LayoutInflater 的 inflate 方法的几个参数分别代表什么?

答案:第一个参数为布局文件ID

方法用三个参数时,root的参数是否为空,决定了我们要不要沿用root的布局属性,attachToRoot是否为true,决定了是否将我们的layout作为子View添加进去。

方法用两个参数时,root既决定了是否要沿用root的布局属性,也决定了是否要将我们的layout作为子View添加进去。


Android 1月13日题:FragmentPagerAdapter 与FragmentStatePagerAdapter 的区别与使用场景?

答案:FragmentPagerAdapter 的每个 Fragment 会持久的保存在 FragmentManager 中,只要用户可以返回到页面中,它都不会被销毁。因此适用于那些数据相对静态的页,Fragment 数量也比较少的那种;FragmentStatePagerAdapter 只保留当前页面,当页面不可见时,该 Fragment 就会被消除,释放其资源。因此适用于那些 数据动态性较大、 占用内存较多,多 Fragment 的情况;


Android 1月14日题:Activity 的启动模式

答案:standard 标准模式: 每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否已经存在,此模式的 Activity 默认会进入启动它的 Activity 所属的任务栈中;

singleTop 栈顶复用模式: 如果新 Activity 已经位于任务栈的栈顶,那么此 Activity 不会被重新创建,同时会回调 onNewIntent方法,如果新 Activity 实例已经存在但不在栈顶,那么Activity 依然会被重新创建;

singleTask 栈内复用模式: 只要 Activity 在一个任务栈中存在,那么多次启动此 Activity 都不会重新创·建实例,并回调onNewIntent 方法,此模式启动 Activity A,系统首先会寻找是否存在 A 想要的任务栈,如果不存在,就会重新创建一个任务栈,然后把创建好 A 的实例放到栈中;

singleInstance单实例模式: 这是一种加强的 singleTask模式,具有此种模式的 Activity 只能单独地位于一个任务栈中,且此任务栈中只有唯一一个实例;


Android 1月15日题:volatile关键字的作用

答案:volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”,保证了变量的可见性,不能保证对volatile变量操作的原子性

并且能禁止指令重排序。


Android 1月16日题:简述Android类加载器

答案:在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并、优化,然后再生成一个最终的class.dex,目的是把不同class文件重复的东西只需保留一份,在早期的Android应用开发中,如果不对Android应用进行分dex处理,那么最后一个应用的apk只会有一个dex文件。


Android 1月17日题:Java中守护线程和用户线程的区别?

答案:java中线程氛围守护线程Daemon和用户线程User。可以通过Thread.setDaemon(true)设置为守护线程,但是必须在start之前调用。

Daemon是为其他线程提供服务,如果全部用户线程结束,Daemon没有服务对象,也就没有继续运行程序的必要了。

守护线程最典型的应用就是 GC (垃圾回收器)


Android 1月20日题:TCP为什么要三次握手?

答案: client发送了第一个连接的请求报文,但是由于网络不好,这个请求没有立即到达服务端,而是在某个网络节点中滞留了,直到某个时间才到达server,本来这已经是一个失效的报文,但是server端接收到这个请求报文后,还是会想client发出确认的报文,表示同意连接。假如不采用三次握手,那么只要server发出确认,新的建立就连接了,但其实这个请求是失效的请求,client是不会理睬server的确认信息,也不会向服务端发送确认的请求,但是server认为新的连接已经建立起来了,并一直等待client发来数据,这样,server的很多资源就没白白浪费掉了,采用三次握手就是为了防止这种情况的发生,server会因为收不到确认的报文,就知道clien我们需要设计一个自定操作符,主要有两种情况:

一、如果我们的操作符是作为第一个事件源头,可以通过继承Observable类进行下游对接。

二、如果我们的操作符是作为变换过程中间的部份,可以通过继承AbstractObservableWithUpstream来进行上游与下游的对接过程。


Android 1月21日题:如何避免过度绘制

答案:一.移除默认的window背景

二.移除布局里面不必要的背景

三.减少布局层级

四.自定义布局使用clipRect()裁剪进行部分绘制

转载自 安卓2020年1月每日一题

posted @   清霜辰  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示