Android面试题

1、Service开启的方式有几种,分别有什么不同?

方式一:使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。

方式二:使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止了。

2、什么是ANR 如何避免ANR?

ANR:Application Not Responding。在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的回应,当用户操作在5s内应用程序没能做出反应,或者BroadcastReceiver在10秒内没有执行完毕,就会出现应用程序无回应对话框,这既是ANR。 事件没有机会处理或者事件处理超时都会导致ANR!

避免方法:Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作或潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。

3、ListView的优化方案

① 复用 ConvertView,使用历史的 view,提升效率 200% 。

② 自定义静态类 ViewHolder,减少 findViewById 的次数。提升效率 50%

③ 异步加载数据,分页加载数据。

④ 使用 WeakRefrence 引用 ImageView 对象。

4、请谈一下android系统的架构 

1.应用层: 所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者我们从Google Play上下载的程序,包括我们自己开发的应用程序。

2.应用框架层: 这一层主要提供了构建应用时可能用到的API。Android自带的一些核心应用程序就是使用这些API完成的,开发者可以通过使用这些API构建自己的应用程序。比如有活动管理器、View系统。内容提供器、通知管理器等。

3.运行库:负责解释和执行生成的dalvik格式的字节码。 这一层通过一些C/C++库来为Android系统提供了主要的特性支持,这一层还有Android运行时库,它提供了一些核心库,能允许开发者使用Java来编写Android应用。

4.硬件抽象层(HAL):它是设备内核驱动的抽象接口,实现向更高级别的Java API框架提供访问底层设备的应用编程接口。

5.Linux内核层:负责硬件的驱动程序、网络、电源、系统安全以及存储器管理等功能。

5、MediaPlayer与VideoView的区别

MediaPlayer:用于音频播放

VideoView:android系统提供的一个媒体播放显示和控制的控件,它继承surfaceView。

6、动画有哪几种,特点和区别

一共有两种动画: Tween动画和Frame动画

Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;

Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影;

帧动画: AnimationDrawable 控制animation-list xml布局 。

补间动画:通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果 。

属性动画:属性动画在某些内容上对补间动画进行了补充。比如改变了控件的属性。

7、Handler与Looper的作用与区别

Handler:是Message的主要处理者,负责Message的发送,Message内容的执行处理。例如将消息发送到消息队列(sendMessage),更新UI组件(实现该类的handleMessage方法)

Looper:是Handler和消息队列之间的通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放到队列。Looper也把消息队列里的消息广播给所有的Looper。

8、横竖屏切换时 Activity 的生命周期 

此时的生命周期跟清单文件里的配置有关系 :

1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,默认首先销毁当前的Activity,然后重新加载。

2.如果设置了Activity android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged的方法。

9、Activity启动模式 

Standard 标准模式:每次启动Activity都会创建一个新的Activity实例,并且将其压入任务栈栈顶,而不管这个Activity是否已经存在。Activity的启动三回调(onCreate()->onStart()->onResume())都会执行。

Singletop 栈顶复用模式:在SingleTop模式中,会检查在返回栈栈顶是不是你要启动的Activity,如果不是的话,会启动这个Activity,如果是的话,他就不会启动,直接使用。

Singletask 栈内复用模式:这种模式是最智能的模式,系统会在你的返回栈中检查是否有你想启动的Activity,有的话就直接推向栈顶,没有的话才回去创建。

Singleintance 加强版的singleTask模式:这种模式是最特殊的模式,这种模式是为了让不同的app之间可以共享同一个活动,如果你的app想让别的app调用你的某一个界面,就可以用这种模式,这种模式会为你想共享的界面单独创造出一个单独使用的返回栈,不会与别的返回栈共同使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值