安卓面试基础知识总结(6)

2019-04-01 16:14

(1)因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。

(2)另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应用程序的内存溢出并崩溃,

所以我们这里用得是LruCache来缓存图片,当存储Image的大小大于LruCache设定的值,系统自动释放内存.

16.5 本地存储:

通过getCacheDir()得到缓存目录,将图片读取到内存中.

实现:把文件描述符传递给本地代码,由本地代码去创建图片

优点:由于是本地代码创建的,那么byte数组的内存占用不会算到应用内存中,并且一旦内存不足,将会把bitmap的数组回收掉,而bitmap不会被回收,当显示的时候,发现bitmap的数组为空时,将会再次根据文件描述符去加载图片,此时可能由于加载耗时造成界面卡顿,但总比OOM要好得多。 注意:由于本地代码在创建图片时,没有对图片进行校验,所以如果文件不完整,或者根本就不是一个图片时,系统也不会报错,仍然会返回一个bitmap,但是这个bitmap是一个纯黑色的bitmap。 所以我们在下载图片的时候,一定要先以一个临时文件下载,等下载完毕了,再对图片进行重命名。

16.6 网络加载:

直接访问url加载图片.

17 开发中如何避免OOM异常?如果出现来OOM异常应该如何处理?

1. 缓存图像到内存,采用软引用缓存到内存,而不是在每次使用的时候都从新

加载到内存,eg: Bitmap bitmap =

BitmapFactory.decodeFile(path);mImageCache.put(path, new SoftReference(bitmap)); 2. 调整图像大小,onLoadingComplete()手机屏幕尺寸有限,分配给图像的显

示区域本身就更小,有时图像大小可以做适当调整;

3. 采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比

Bitmap.Config.ARGB_8888更省内存;

4. 及时回收图像,如果引用了大量Bitmap对象,而应用又不需要同时显示所

有图片,可以将暂时用不到的Bitmap对象及时回收掉;bitmap.recycle();mImageCache.remove(path);

5. 自定义堆内存分配大小,优化Dalvik虚拟机的堆内存分配;

18 开发中做过自定义控件么?或者问做过哪些自定义控件?如何实现的?

18.1 自定义控件的实现步骤

1. 写一个类继承View或你想扩展功能的控件(比如TextView)

2. 在/res/value下创建一个attr.xml文件

3. 重写父类的构造方法(我一般把三个都写上)在构造方法中获取到自定

义是属性的值。 4. 重写onDraw()方法

5. 新建一个Activity(此处不再给出),在其使用的布局文件中添加自定

义控件,并且可以引入自定义的命名空间,使用attr中定义的属性 (具体资料实现参加附件资料)

18.2 具体实现

1. 用过.

2. 自定义SlidingMenu,仿ViewPager,自定义栏目定制功能,自定义扇形进

度条,自定义开关.仿优酷旋转菜单. 18.2.1 仿VIewPager技术要点 1. 2. 3. 4.

新建MyViewpager继承ViewGroup

注册OnTouch事件根据用户手指移动距离判断是否需要跳到下一页 注册手势事件,实现用户手指滑动页面跟着用户手指滑动的效果

处理事件分发机制,判断ViewPager的内部子控件是否需要处理滑动事件,按照预想的效果,将事件合理分发(如上下滑动事件教给子View处理,左右滑动事件交给ViewPager处理) 5. 在需要的Activity中new出来,按照需要添加子View,进行操作和显示 18.2.2 自定义优化菜单技术要点

1. 用相对布局先绘制好界面

2. 按照需要的效果为每层界面添加动画效果(补间动画使用时需要注意在

控件消失后设置相应控件不可用或者不可点击,属性动画不需要设置) 3. 重写OnKeyDown事件,对用户按下返回键也实现相应的动画

4. 为菜单上每个按钮添加事件(setOnclick时最好让本类实现点击事件接

口,因为菜单的点击事件可能有点多,这样代码更有条理性) 自定义TOgbutton

18.2.3 自定义ToggleButton技术要点

1. 2. 3. 4. 5. 6.

新建MyToggleButton类集成View 初始化各种图片资源

为自身设置OnclickEvent 为自身设置OntouchEvent

设置Touch边界,防止用户将控件滑出边界

在OntouchEvent里根据用户手指移动绝对值距离判断是点击事件or移动事件,定义变量区别,让两个Event分别响应,然后刷新界面

19 都用过哪些设计模式?都是在什么情况下使用?写个单利设计模式、观察者模式。

常用的:适配器模式,装饰模式,观察者模式,工厂模式,单例模式,

19.1 适配器模式

ListView,ViewPager,等的Adapter就是典型的适配器

19.2 单例模式:

1.初始化一个该类的私有成员变量.

2.私有构造方法.

3.提供一个方法返回该类的成员变量.

19.3 观察者模式:

1.写一个回调接口.

2.设置一个该接口的成员变量

3.提供一个set..Listener(该接口)方法,给另一个类来实现此接口.将实现的对象赋值给成员变量

4.在数据改变时调用接口的回调方法.

19.4 工厂模式

1. Fragment工厂

2. 线程工厂

20 静态代码块、构造代码块、构造函数执行顺序?(子类父类都有,使用多态创建对象)静态方法的覆盖问题?

1.静态代码块->构造代码块->构造函数.

2.静态方法不会被覆盖,如果父类的引用指向了子类的对象,如:Parent sub =

new Sub(); 这时调用sub的静态方法会执行父类的,如果子类引用只想子类对象,如:Sub sub = new Sub(); 这是调用sub的静态方法会执行子类的.

21 开启线程有哪些方法?是么情况下使用Thread?什么情况下使用Runnable?

1. 写一个类继承Thread,复写run方法,使用start开启线程.

2. 实现runnable接口,将实现的对象传递给Thread的构造方法,再使用start

开启线程.

在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:

(1)避免点继承的局限,一个类可以实现多个接口。 (2)适合于资源的共享

22 TCP与UDP?Socket?

22.1 TCP

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。

一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。 我们来看看这三次对话的简单过程:

1. 主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,

这是第一次对话;

2. 主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发

送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;

3. 主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接

着吧!”,这是第三次对话。

三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

22.2 UDP

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。

比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确

认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

22.3 TCP协议和UDP协议的差别

是否可连接 传输可靠性 应用场合 速度 TCP 面向连接 可靠 传输大量数据 慢 UDP 面向非链接 不可靠 少量数据 快 23 关于 Fragment

Android 3.0出现,基于pad的

有两种方式:activity可以包含多个fragment 另一种是动态加载fragment

24 关于app竖屏幕显示

app竖着的话必须设置属性:android:screenOrientation=\

25 Scrollview里面能不能嵌套listview,有什么问题出现?

能,listview显示不全,只显示一行,listview无法滑动,焦点呗scrollcview抢占了。

1.计算每个item的高度,调用measure计算,然后用,view,setparams.height。每个item的布局必须是linearlyout,因为其他的布局里面没有

重写onmesure的方法。

3. 重写listview的ontounchevent方法。当按下的时候拦截scrollview的滚

动。


安卓面试基础知识总结(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015-2020年中国建筑节能市场研究及投资前景预测报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: