栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android面试题

1. Android四大组件及使用。

Activity :应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。

BroadcastReceive广播接收器:应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

Service 服务:一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。

Content Provider内容提供者 :android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。

2. 屏幕适配,常用方案。

Android屏幕适配的发展

  1、dp直接适配

  2、宽高限定符适配

  3、UI适配框架Autolayout

目前最好的适配方案

  1、SmallestWidth适配(sw限定符适配)

  2、今日头条适配方案

  3、AutoSize

3.布局优化。
  1. 使用工具检测(Hierarchy Viewer);
  2. 使用include 和merge标签减少复用布局而产生的布局嵌套,使用ViewStub懒加载减少渲染元素;
  3. 诊断过度绘制,优化过度绘制

4. 懒加载有什么缺点。
  1.  ViewStub对象只可以Inflate一次;
  2. ViewStub不支持merge

5. MVC、MVP、MVVM区别。

MVC的特点

它将数据、视图、控制分开,实现了松耦合。

View将事件传递到Controller中

Controller完成想要业务后改变Model状态

Model更新View

MVC的优点

实现了解耦合,修改其中一层时,不用修改另外两层代码

可维护性高,松耦合也就意味着维护起来更加方便

重用性高

MVC的缺点

由于控件的数据绑定都需要在Activity中完成,Activity/Fragment在View与Controller的定义中有点模糊。

伴随着业务的增加,Controller容易变得臃肿。

MVP的特点

View接受事件,传递给Presenter

Presenter做逻辑处理,修改Model

Model通知Presenter数据变化,Presenter更新View

MVP的优点

将Model与View完全分隔,提高了可扩展性。

便于测试。在测试Presenter时,只要实现View的接口并注入到Presenter就可以测试Presenter的业务逻辑。

MVP的缺点

与MVC一样,P层起到的控制功能伴随着业务的增多,也会变得臃肿。

Presneter需要持有View的引用,同时View也需要持有Presenter的引用,控制上存在一定复杂度。

MVVM的特点

View接受事件,转交给ViewModel

ViewModel操作Model更新数据

Model更新后通知ViewModel,ViewModel更新View数据

MVVM的优点

低耦合。由于ViewModel的存在,View可以独立于Model变化与修改;同理,Model也可以独立于View变化与修改。

可重用性。一个ViewModel可被多个View重复绑定,实现同一组业务。

ViewModel中解决了MVP中V-P互相持有引用的问题,使得结构更清晰,简洁

MVVM的缺点

ViewModel持有Model的依赖。

数据绑定方式使得bug难以确定是在View中还是在Model中。

6.Glide加载大图原理,如何防止内存溢出。

清单文件可以增大系统分配给APP的最大内存,默认大概60M。

Android:尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,

因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,
decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,

Glide:在加载图片的时候,不要缓存资源,如果可以获取控件尺寸的话,可以控制加载的尺寸;

.skipMemoryCache(true) //禁止Glide内存缓存

.diskCacheStrategy(DiskCacheStrategy.NONE) //不缓存资源

7.内存优化。

常见的内存泄漏:

  1. 静态引用(自身代码和第三方代码)
  2. 集合内引用
  3. Handler消息未清除
  4. 非静态的内部类中持有外部内的应用
  5. 匿名内部类/非静态内部类和异步线程

实践:

  1. 先解决程序中内存占用较大的业务模块中的内存泄漏,不熟悉MAT的使用的可以看看这个
  2. 移除程序中多余的代码和引用,这里使用默认的lint检测再配合shrinkResources来删除无效资源
  3. 优化图片,保证图片放置在合理的文件夹,根据View大小加载合适的图片大小,根据手机状态配置bitmap和回收策略
  4. 优化对象创建,比如string,使用对象池等

8.WebView和H5页面优化
  1. 当App启动的时候,就在Application里初始化一个Webview,对,就是直接new;当需要用的时候就直接取这个单例形式的webview去加载网页,这样就把webview初始化的等待时间变得用户无感知;不过每次使用的时候需要清空上次使用的页面内容
  2. 使用WebView缓存
  3. H5页面预加载
  4. HTML 应用程序缓存机制

应用程序缓存(简称 AppCache) 为 web 应用的离线访问提供了支持,其原理是基于 manifest 属性和 manifest 文件。manifest 缓存会一直保存,直到缓存被清除,manifest 文件被修改,或浏览器更新 AppCache。

  1. Monkey测试。
  2. APP启动流程,从点击桌面图标开始。
  3. 网络优化。
  4. APP卡顿处理。
  5. 怎么多渠道打包;分渠道不打包某些第三方包(比如在华为手机应用市场的apk不打包小米推送的jar包)。
  6. 架构适配X86,ARM等。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340243.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号