您的位置:首页 > 职场人生

android常见面试模块

2016-09-02 00:48 274 查看
一、ANR异常 (Application Not Responding) 应用程序无响应  

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

默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。

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

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

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

2.BroadcastReceiver在10秒内没有执行完毕

造成以上两点的原因有很多,比如在主线程中做了非常耗时的操作,比如说是下载,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)第二,不要在后台滥用Service。Android非常开放,开发者可在后台触发任何处理逻辑,肆意占用CPU和内存。

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

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

BatteryManager;EXTRA_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。如果大量的使用的话,就会占据内存空间不释放,积少成多也会造成内存的不断开销,直至挂掉。

2、Cursor及时关闭

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

3、BroadCastReceiver、Service

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

4、I/O流

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

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息