1.除了一些不规则的圆角之类的非.9图片因为从大图压小会造成圆角变小,其他的图片基本上都可以从高dpi压缩到低dpi使用。所以只维持一套drawable-xxhdpi资源就可以了,特殊的图片才分多个资源放不同的dpi目录。这样会省掉大量的UI适配时间。
2.放一套drawable-hdpi的资源适配hdpi的机器效果也很一般,效果没有多大提升。
3.放一套这样适配也可以减少apk大小。
除非你是做系统级别的超高要求的App,才用多套资源对不同dpi的设备。
android中单例模式的使用场景一般有哪些?需要注意哪些问题?
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点
1)应用中某个实例对象需要频繁的被访问。
2)应用中每次启动只会存在一个实例。如账号系统,数据库系统。
使用单例需要注意以下几点问题:
1)必须防止外部可以调用构造函数进行实例化,因此构造函数必须私有化。
2)必须定义一个静态函数获得该单例
3)单例使用volatile修饰
4)使用synchronized 进行同步处理,并且双重判断是否为null,我们看到synchronized (Singleton.class)里面又进行了是否为null的判断,这是因为一个线程进入了该代码,如果另一个线程在等待,这时候前一个线程创建了一个实例出来完毕后,另一个线程获得锁进入该同步代码,实例已经存在,没必要再次创建,因此这个判断是否是null还是必须的。
static变量可以在程序中使用吗?有什么问题?
很多同学喜欢用static变量,可以在不同的包和类中调用,省的传来传去的。
这个我是不建议使用,因为 一是有被回收的危险,导致值为空,二是会有值需要清理的问题。
什么意思呢?这个说来话长 ,简单来说 是因为静态变量和类一样都是在进程加载的时候被加载,在进程结束的时候被结束。而android对于进程和内存的管理和PC不一样,在资源足够的情况下,android会重启被杀掉的进程。也就是说 静态变量的值不可靠,也可以理解为内存的值不可靠。
有同学说 我退出应用了,进程不就被杀死了吗?这个不是的 这两个不是等价关系,也就是说 你的static变量 在一些时候你没有做手动的一些清理工作,有可能值会还存在 ,导致程序出现错误。
所以本人不建议程序中大量使用static变量。
android开发中数据库的使用场景有哪些呢?
一般用到数据库
1.比较复杂的表结构需要本地存储
2.基本不需要更新的字典数据 比如 省市县 ,这个更新频率很低。
3.涉及到一些数据安全问题的数据。
单一性质的json数据还是用prefs方便一点。
AIDL是什么 应用场景有哪些?
AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言,设计这门语言的目的是为了实现进程间通信,尤其是在涉及多进程并发情况下的进程间通信。
1.提供接口给外部应用调用,可以是sdk,也可以是同个公司里多个app的通信~
2.当同一个应用时,服务设置单独进程,即后台与前台activity分离,不希望前台被回收影响到后台运行的场景下,比如音乐播放器,或一些偷偷摸摸干的事……
AIDL当然很多情况下,也可以用广播来实现,但是耗时和灵活性上还是建议用AIDL来实现。
android音频解码有什么三方库吗?需要支持aac、acc、ape等无损音频.
ffmpeg
如何显示menu上面的三个点?
有些机型如果显示不出来那三个点 ,可以参考此博客里面的方法
http://blog.csdn.net/shaoyezhangliwei/article/details/47833941
Android里面为什么要设计出Bundle而不是直接用Map结构
-
Bundle内部是由ArrayMap实现的,ArrayMap的内部实现是两个数组,一个int数组是存储对象数据对应下标,一个对象数组保存key和value,内部使用二分法对key进行排序,所以在添加、删除、查找数据的时候,都会使用二分法查找,只适合于小数据量操作,如果在数据量比较大的情况下,那么它的性能将退化。而HashMap内部则是数组+链表结构,所以在数据量较少的时候,HashMap的Entry Array比ArrayMap占用更多的内存。因为使用Bundle的场景大多数为小数据量,我没见过在两个Activity之间传递10个以上数据的场景,所以相比之下,在这种情况下使用ArrayMap保存数据,在操作速度和内存占用上都具有优势,因此使用Bundle来传递数据,可以保证更快的速度和更少的内存占用。
-
另外一个原因,则是在Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable进行序列化。而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为了更加快速的进行数据的序列化和反序列化,系统封装了Bundle类,方便我们进行数据的传输。
Android Studio Drawable和Mipmap文件夹的区别
把图片放到mipmiaps可以提高系统渲染图片的速度,提高图片质量,减少GPU压力。
Android 开发过程中 常用的设计模式都有哪些?
1)单例模式
2)观察者模式
这两个是我用的最多的。
其它的还有
Builder模式 外观模式 模板方法 策略模式 代理模式 迭代器模式 责任链模式 命令模式 桥接模式 原型模式。
这些都是带链接的 大家需要哪个自己点击学习就行。
android中 一般图片都是什么格式的?
1.app应用本身的一般都是png
2.如果是用户上传的图片,的一般会处理成jpg格式,上传到服务器后会做webp的转化,别的用户看到的图片就是webp格式的,图片质量不仔细研究看不出来和jpg原图的差别,但是流量却节省了非常多;
声明ViewHolder内部类时,为什么建议使用static关键字
这个是静态内部类和非静态内部类的主要区别之一。非静态内部类会隐式持有外部类的引用,就像大家经常将自定义的adapter在Activity类里,然后在adapter类里面是可以随意调用外部activity的方法的。当你将内部类定义为static时,你就调用不了外部类的实例方法了,因为这时候静态内部类是不持有外部类的引用的。声明ViewHolder静态内部类,可以将ViewHolder和外部类解引用。大家会说一般ViewHolder都很简单,不定义为static也没事吧。确实如此,但是如果你将它定义为static的,说明你懂这些含义。万一有一天你在这个ViewHolder加入一些复杂逻辑,做了一些耗时工作,那么如果ViewHolder是非静态内部类的话,就很容易出现内存泄露。如果是静态的话,你就不能直接引用外部类,迫使你关注如何避免相互引用。 所以将 ViewHolder内部类 定义为静态的,是一种好习惯。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档
喜欢的朋友可以关注、转发、点赞 感谢!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
做成了PDF文档
[外链图片转存中…(img-OMViYUrm-1713245188698)]
[外链图片转存中…(img-GZW4sf0v-1713245188699)]
喜欢的朋友可以关注、转发、点赞 感谢!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!