Android最新面试题(1)

本文深入探讨了Android应用开发中的关键设计模式,包括单例模式、观察者模式、迭代器模式、模板方法等,并提供了ListView列表效率优化策略与内存优化技巧,如bitmap设置、异步加载图片、ViewHolder模式等。同时,阐述了异常处理、数据库优化与数据存储方法,并对比了启动服务的两种方式。最后,讨论了Handler与HandlerThread的关系以及如何有效处理内存泄露。

1.简单的设计模式:
单例模式:在系统中一个类只有一个实例。分为懒汉模式和饿汉模式。饿汉模式的代码如下:
public class Singleten{
private static singleten Instance = new Singleten();
private Singleten(){}
public static getInstance()
{
return Instance ;
}
}
观察者模式:一个对象改变状态,则依赖它的所有对象都会得到通知并改变状态。
迭代器模式:iterator();遍历元素的方法有hasNext(),first(),next(),remove()
模版方法

2.Listview列表效率优化
1)利用convertview回收视图
2)采用ViewHolder模式
3异步加载图片
4快速滑动时不加载图片
5如果自定义的item中有图片,需要处理图片(减少图片所占内存)
    1.
对图片进行边界压缩 2.option类来保存图片大小 3.避免图片的实时缩放,最好预先缩放到视图大小
6)尽量避免在listview适配器中使用线程,因为线程是产生内存泄露的主要原因在于线程的生命周期不可控。

3.应用内存优化
1bitmap设置图片大小(优化内存溢出)
BitmapFactory.Option option = new BitmapFactory.Option();
option.inSampleSize = 2; //
将视图宽、高都变为原来的1/2
2bitmap对象销毁,可以借助recycle()方法让GC回收bitmap对象。
3)尽量避免static成员变量引用资源消耗过多的实例,如:context
4)使用Applicationcontext
5)及时关闭资源,如在查询数据库时需要及时关闭cursor
6)对经常使用的图片使用软引用保存
7)线程也是造成内存泄露的一个重要原因,在于线程的生命周期不可控制,解决方法:
    1.
将线程内部类改为静态内部类
     2.
用弱引用来保存context引用
8)使用.9图片

4.HandlerHandlerThread关系
android
消息处理机制:handlerLooperMessageQueueMessage
将一个线程变为looper线程的方法:Looper.prepare; //初始化MessageQueueLooper
Looper.loop();//
消息循环

5.异常处理
IoException
异常是编译器异常,在编译时就会报错
ANR
异常解决方法:尽量在主线程只做少量工作,比较耗时的工作单独在一个子线程中完成(或使用异步请求)

6.数据库的优化
1.
使用索引
2.
使用事务
3.
查询时返回更少的结果集和字段

7.数据存储的方法
sharedpreference
存储、文件存储、SQLite存储、contentprovide存储、网络存储数据

8.启动服务的两种方法:startservicebindservice
使用startservice()启动服务,调用者和服务之间没有关联,即使调用者退出了,服务仍然运行;使用bindservice()启动服务,调用者和服务绑定在一起,调用者一旦退出,服务也终止;采用startservice启动服务,只能调用stopservice终止服务。

startservice()启动服务的生命周期:oncreat()、onstart(),ondestroy();第一次startservice()启动服务会调用oncreat()、onstart();后面再使用startservice()启动服务,只会调用onstart()

bindservice()启动服务的生命周期:oncreat()、onbind()、omunbind()、ondestroy();第一次bindservice()启动服务调用oncreat()、onbind(),多次调用bindservice()并不会多次创建服务及绑定,如果调用者希望与正在绑定的服务解除绑定,可以调用unbindservice()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值