android部分面试题

1.要做到一个尽可能流程的ListView,如何进行优化?

   (1),Item布局,层级越少越好,使用hierarchyview工具查看有优化。

   (2),复用convertView,ViewHolder

   (3),item中有图片的时候,进行异步加载

   (4),在用户快速滑动的时候,不加载图片

   (5),item中有图片的时候,对应图片进行适当的压缩

   (6),实现数据的分页加载

2.Service的onCreate回调在UI线程中吗?

   Service生命周期的各个回调和其他的应用组件一样,是跑在主线程中,会影响到你的UI操作或者阻塞

主线程中的其他事情(尤其是bind Service时)

3.请介绍下AsyncTask的内部实现,适用的场景是?

    AsyncTask内部也是Handler机制来完成的,只不过Android提供了执行框架来提供线程池来执行相应的任务,因为线程池

的大小问题,所以AsyncTask只应该用来执行耗时时间较短的任务,比如http请求,大规模的下载和数据库的更改不适用于

AsyncTask,因为会导致线程池阻塞,没有线程来执行其他任务,导致的情形会发生AsyncTask根本执行不了的问题

4.谈谈你对binder机制的理解

    binder是一种IPC机制,进程间通讯的一种工具

    java层可以利用aidl工具来实现相应的接口(生成通讯代码)

5.Android中进程间通讯有哪些实现方式?

Intent,    Binder(AIDL),  Messenger,  BroadcastReceiver

6.自定义view的基本流程

  (1),自定义view的属性,编写attr.xml文件

(2),在layout布局文件中引用,同时引用命名空间

(3),在view的构造方法中获得我们自定义的属性,在自定义控件中进行读取(构造方法拿到attr.xml文件值)

(4),重写onMesure   (如果自定义ViewGroup还要重写onLayout   )

(5),重写onDraw(如果自定义ViewGroup可以不用重写该项)

7.Android多线程的实现方式有哪些?

Thread 和 AsyncTask

Thread可以与Loop和Handler共用建立消息处理队列

AsyncTask可以作为线程池并进行处理多任务

8.ANR是什么?怎么避免和解决ANR?

ANR: Appliaction Not  Responding,即应用无响应

ANR一般有三种类型:

   1:KeyDispatchTimeout( seconds) - - 主要类型

按键或者触摸事件在特定时间内无响应

2:BroadcastTimeout(10 seconds) BroadcastReceiver在特定时间内无法处理完成

3:ServiceTimeout(20 seconds) –小概率类型 

Service在特定的时间内无法处理完成 超时的原因一般有两种: 

(1)当前的事件没有机会得到处理(UI线程正在处理前一个事件没有及时完成或者looper被某种原因 阻塞住)

 (2)当前的事件正在处理,但没有及时完成 UI线程尽量只做跟UI相关的工作,耗时的工作(数据库操作,I/O,连接网络或者其他可能阻碍UI线 程的操作)放入单独的线程处理,尽量用Handler来处理UI thread和thread之间的交互。

 UI线程主要包括如下: Activity:onCreate(), onResume(), onDestroy(), onKeyDown(),     onClick() AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel() Mainthread handler: handleMessage(), post(runnable r) 

9.Android下解决滑动冲突的常见思路是什么?

相关的滑动组件重写onInterceptTouchEvent,然后判断根据xy值,来决定是否拦截当前操作

10,内存泄漏检测有什么方法?

检测:

(1),ddms Heap发现内存泄漏

dataObject   totalSize的大小,是否稳定在一个范围内,如果操作程序,不断增加,说明内存泄漏

(2),使用Heap   Tool 进行内存快照前后对比

BlankActivity手动触发gc进行前后对比,对象是否被及时回收

定位:

(1),MAT插件打开.hprof具体定位内存泄漏

查看histogram顶,选中某一个对象,查看它的gc 引用链,以为存在gc引用链的,说明无法回收

(2),AndroidStudio的Allocation  Tracker:

观测到期间的内存分配,哪些对象被创建,什么时候被创建,从而准确定位;

11.谈谈你对Android中Context的理解?

Context包含上下文信息(外部值)的一个参数,android中的Context分三种,

Application Context, Activity Context, Service  Context;

它描述的是 一个应用程序环境的信息,通过它我们可以获取应用程序的资源和类,页包括一些应用级别的操作,

例如:启动一个Activity,发送广播,接收Intent信息等

12,请问在平时开发过程中,你是如何做到多分辩率适配的?

(1),根据不同分辨率建立不同的布局

(2),根据分辨率不同建立不同分辨率的资源图片

(3),在程序启动时,获取当前 屏幕的分辨率和密度,在代码中进行适配

(4),为不同分辨率的写不同的dimen文件

(5),其实还有就是使用fragement

13.如何在不失真的条件下显示 一张超清的图片或者长图?

(1),通过计算BitmapFactory.Optons 对象的inSamleSize值等比的压缩图片

(2),使用WebView来加载图片

(3),使用MapView或者TileView来显示图片(类似地图的机制)

(4),BitmapRegionDecoder局部加载(不过响应用户手势加载不同区域是个难点)

14.、如何理解Bitmap,以及相关的优化方式?

Bitmap是android中经常使用的一个类,它代表了一个图片资源,

Bitmap消耗内存很严重,如果不注意优化代码,经常出现oom问题,优化方式通常有:

(1),使用缓存

(2),压缩图片

(3),及时回收;至于什么时候需要手动调用recycle,这就看具体场景了,原则是当我们不再使用Bit mao时,需要回收之。另外,我们需要注意,2.3之前Bitmap对象与像素数据是分开存放的,Bitmap 对象存在Java Heap中而像素数据存放在Native Memory中,这时很有必要调用recycle回收内存 。但是2.3之后,Bitmap对象和像素数据都是存在Heap中,GC可以回收其内存。

15.Http无状态是指什么?

无状态是指服务器不知道客户端是什么状态

HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。 HTTP无状态的特性严重阻碍了这些

交互式应用程序的实现,毕竟交互是需要承前启后的, 简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种

 用于保持HTTP状

态的技术就应运而生了,一个是Cookie,而另一个则是Session。

16.怎么实现ListView多种布局?

(1)、重写 getViewTypeCount() – 该方法返回多少个不同的布局 

(2)、重写 getItemViewType(int) – 根据position返回相应的Item 

(3)、根据view item的类型,在getView中创建正确的convertView 

17.Android的几种存储方式?

  5种,分别为数据库Sqlite,本地文件,网络,ContentProvider,SharePreference

18.如何安全的退出已调用多个Activiy的Application?

(1),循环遍历退出用的最多,在Activity打开时记录,并在需要退出时,遍历所有Activity,并 调用finish方法。 

(2), 其他还有抛异常退出,使用startActivityForResult方法进行连续判断退出,杀进程以及杀 死主线程等方法。

19,activity启动模式?

(1),standard 

 默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下 ,可以有多个相同的实例,也允许多个相同Activity叠加。

 (2), singleTop 

可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启 动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

 (3),singleTask 8. 只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建 一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它 的onNewIntent方法。

 如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,si ngleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask 的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。 

(4),singleInstance 12. 只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的 Activity存在。

20.从一个ActivityA跳转到另外一个ActivityB后,在返回后,ActivityA的生命?

(1),ActivityB如果为透明或者窗口化,那么将执行onPause-onResume 

(2),ActivityB是全屏的,并非透明,那么将执行onPause-onStop-onRestart-onStart-o nResume 

(3),ActivityA因内存不足被回收,那么会执行onPause-onStop-onDestory-onCreate-on Start-onResume

21.handle机制主要用途,他的实现原理?

Handler是android用来实现 线程间通信的工具,一般在开发中用户子线程更新UI,以及延迟 操作等。

(1),创建一个Handler必须要有循环者Looper对象,而主线程已经实现了Looper,所以在主线程 中可以直接创建Handler对象,我们也可以在子线程中往主线程发消息,

 (2),如果需要其他线程往子线程发消息,那么必须将子线程提升为循环者Looper线程,在子线程入 口run()方法中调用Looper的prepare以及Looper.loop()方法提升,注意loop()以后的代 码不会执行到。

 (3),当子线程提升为Looper对象后,会在Looper中创建一个消息队列(MessageQueue),这是 我们的Handler就和这个消息队列绑定在了一起,当我们的Handler在任意线程发消息时,都 会放到MessageQueue中,而Looper不断的将这些消息取出来,并且交给发消息的Handler中 的handlerMessage方法进行处理



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值