android常见面试模块

本文探讨了移动应用的性能优化策略,包括避免ANR、降低耗电量和发热的方法,并介绍了良好的编码风格、服务器端开发特点及移动产品的设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ANR异常 (Application Not Responding) 应用程序无响应  

 ANR定义:一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。

 默认情况下,在androidActivity的最长执行时间是5BroadcastReceiver最长执行时间则是10

 

第一:什么会引发ANR(主要原因归结为一句话:在主线程里面做了耗时操作)

Android里,应用程序的响应性是由Activity ManagerWindowManager系统服务监视的 。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR

1.5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)

2.BroadcastReceiver10秒内没有执行完毕

造成以上两点的原因有很多,比如在主线程中做了非常耗时的操作,比如说是下载,io异常等。

潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。

 

第二:如何避免ANR

1运行在主线程里的任何方法都尽可能少做事情。特别是Activity应该在它的关键生命周期方法(如onCreate()onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作(使用消息机制),比如更新主线程中的ui等)

 

2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。

总结:anr异常也是在程序中自己经常遇到的问题,主要的解决办法自己最常用的就是不要在主线程中做耗时的操作,而应放在子线程中来实现,比如采用Handler+mesage的方式,或者是有时候需要做一些和网络相互交互的耗时操作就采用asyntask异步任务的方式(它的底层其实Handler+mesage有所区别的是它是线程池)等,在主线程中更新UI

 

二、具备良好的编码风格, 重视代码结构.

抽取是属于编码风格这一块的内容的

要具备良好的编码风格,抽取必不可少。

抽取是为了保证代码的结构清晰,便于后期维护。

代码首先是给人看的,然后才是给机器看的。

 

良好的编码风格包括:

1)代码与代码之间的空行 (如果代码块之间的关联不是很大)。    

2方法一定要写注释,特别是方法的功能和参数。  

3)方法抽取到一个单独的工具类中,把常量抽取到一个单独的类中

4多个页面之间对相同的部分进行抽取,一般抽取成一个抽象类 

5 Android界面中字符串常、色彩、尺寸的抽取

6 )务器端开发中 数据操作接口的抽取(三层架构)  (对接口的抽取是一种解耦的方式)

7)业务逻辑的过程中,可能要抽取接口,实现接口回调 。

8)类、方法、变量的命名要规范  做到见名知意。

9)代码的缩进,格式化;代码格式化一定要提交一个版本。

 

三、服务器端的开发特点:

Servlet------->dao(对数据库进行增删改查)------->dao.imlp------->数据库的创建和组织

服务器端三层架构:

1:数据访问层:是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据.

 

2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。

 

3:表示层(api):主要表现为WEB方式,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。

 

四、移动互联网产品的特点:

1、用户体验:

1)视觉设计:Android UI设计规范,界面设计友好。

2)手机卡顿:a手机本身响应性能差b从服务期端获取数据慢

3)发热:CPU计算过多导致的,比如短时间内加载大量图片。(文件读写操作)

4)耗电量:硬件(单核到多核、手机屏幕变大)、app功能

5)重量大小:体现在在电池大小外壳材质

 

2、安全性:存储空间足够大,能够存储大量的个人信息,如何确保信息的安全性,这是我们急需解决的问题----好莱坞明星艳照泄露事件。

 

手机中存储了大量的个人信息数据,如何进行保护?

 

五、产品设计理念:
产品设计要以用户为中心,设计要满足用户的需求。准确定位用户,用户用你的产品能做什么?
就如同玩游戏,一定要给用户带来快乐,让用户高兴。
用户关注的是(用户体验):耗电、发热量、(用户体验最直观的是视觉设计)、响应速度(卡顿)。
降低耗电和发热量,手机用户很在意这两点。
总而言之,在移动设备的开发上,三大类问题

1)性能的问题,

2)界面响应的问题

3)产品的稳定性问题,是移动开发人员需要最为注意和保障的。 

 

对于耗电量的理解:

1)手机硬件的变化是导致耗电量增加的一个主要原因,随着智能手机的发展,手机内部已经发生了翻天覆地的变化,从单核手机到双核手机,一直发展到八核手机,手机运算速度的提升也意味着需要更强的电力。

 

2)手机屏幕也纷纷向着大屏发展,从3.5寸到现在的7寸,巨大的手机屏幕也是造成手机耗电量增加的一个主要原因。

 

3)功能增加造成耗电增加。现在的手机发展已经将人们带入了一个全新的移动互联网世界,WIFI、蓝牙、高达百兆的4G网络、海量的应用软件,这些功能的使用无不需要电力的支持,尤其是在手机上观看互联网视频、玩游戏等行为,异常耗费手机电量。

许多功能的使用需要电力的支持,在手机上观看互联网视频、玩游戏等行为异常耗电

 

4)手机用户没有养成良好的使用习惯也是耗电量大的重要原因。手机智能化意味着可以同时启动多个任务,不少用户在使用过程中,没有及时关闭后台程序,导致多个后台程序同时运行,手机后台在持续高强度运作的过程中,耗电量自然就会加大

 

同时启动多个任务,没有及时关闭后台程序,多个后台程序同时运行。

网络保持在线也需要耗费一定的电量。

 

深色壁纸要比浅颜色的壁纸更省电。

在声音优化方面,一般情况下应该尽量把电铃调低。

在工具使用方面,可以通过一些工具软件帮助我们优化手机节能。

任何App包括后台Service应该尽可能减少唤醒CPU的次数,Android的预加载机制。

 

那么如何优化耗电量呢?

1)第一,不要设计复杂算法

在开发一个模块前先想想会不会费电,如果会,就不要去做。代码是为了服务用户,而不是折腾用户。在手机上实现精巧的算法

2)第二,不要在后台滥用ServiceAndroid非常开放,开发者可在后台触发任何处理逻辑,肆意占用CPU和内存。

3)第三,网络请求不要太频繁。系统组件中最耗电的是屏幕,其次就是网络。

 

☆通过代码优化耗电量:(至少能给面试官讲出来)

BatteryManagerEXTRA_LEVEL电池当前的电量状态。

1)如果电池在充电,发挥app的刷新率

2)如果电池电量低,禁止后台服务更新

<-------------------------------------------------------------->

手机重量:对于女士来说,手机还是轻一点比较好。

<--------------------------------------------------------------->

1)手机发热的根本原因是:Cpu运算过多导致、手机使用时间太长、运行的软件太多。

2)手机发热最明显的危害就是:

加速手机里面配件的老化;手机如果发热的很厉害也有可能有爆炸危险;有些手机发热,会有可能自动重启或者卡机

3)A:一般非正常情况下(包括打游戏,打电话)高频运转的时候就会出现手机明显的发热现象,有些游戏需要超频的cpu支持。当然处理器运行得越快,手机产生的热量就越多;

 B:手机的内部空间比较狭小,而且普遍手机散热比较的差。

手机功耗越大,就需要电池放电快,电池快速放电也会发热,从而导致手机CPU和电池的温度较高。

性能越好,功耗就越大。性能指:cpu的运算速度。

4)如何散热呢?减少cpu的运算次数,降低耗电量耗电就是散热最根本的原因.

  最好下载一个手机温度检测工具。

<--------------------------------------------------------------->

从服务期端获取数据慢:这种现象产生的原因有哪几点,如何解决呢?

1可能是因为服务器端有连接人数限制的导致,使用负载均衡技术进行解决。

2)对服务器端数据进行查询的时候,sql语句比较臃肿;要通过优化sql语句,来提高数据库的性能。

<--------------------------------------------------------------->

 

六、Android安全性:

1)应用程序签名达到保护软件的目的。

2)权限拒绝。

3代码混淆。

权限是 Android 平台的一种安全机制,以允许或限制应用程序访问受限的 API和资源

默认情况下,Android 应用程序没有被授予任何权限,不允许它们访问设备上受保护的 API或资源,从而保证了它们的安全。权限必须被请求,定义了定制的权限,文件和内容提供者就可以受到保护。确保在运行时检查、执行、授予和撤销权限。

创建Android 应用程序时可以考虑采用调试模式和发布模式。

 

七、视觉设计:主要体现在app的界面上

App设计应该以用户为中心,满足用户的需求。产品好不好,是用户说了算。

视觉设计:1)应该把握细节。

  2)界面上的元素应该分清主次,让视觉层级清晰,提高界面的易读性。

  3)重视留白:留白能让页面充满更多的呼吸空间。让段落和句子更加清爽利落,让重要的视觉元素更加突出。

  4)设计界面时,尽量多画草图。

  5)视觉设计最根本的目的是:去掉界面上一些花哨、不能解决实际问题的功能和元素,从而让页面更具功能性。界面上每一个存在的元素都应该有其意义。

 

八、内存泄露:该释放的资源没有释放

1、万恶的static

static是个好东西,声明赋值调用就是那么的简单方便,但是伴随而来的还有性能问题。由于static声明变量的生命周期其实是和APP的生命周期一样的,有点类似与Application。如果大量的使用的话,就会占据内存空间不释放,积少成多也会造成内存的不断开销,直至挂掉。

2Cursor及时关闭

在查询SQLite数据库时,会返回一个Cursor,当查询完毕后,及时关闭,这样就可以把查询的结果集及时给回收掉。

3BroadCastReceiverService

绑定广播和服务,一定要记得在不需要的时候给解绑。

4I/O

I/O流操作完毕,读写结束,记得关闭

5、构造Adapter时,没有使用缓存的convertView 3

6Bitmap对象不在使用时调用recycle()释放内存4

九、屏幕适配:(代码适配)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值