Android开发找工作之前先看看这些知识点吧
1.Listview列表效率优化
(1)利用convertview回收视图
(2)采用ViewHolder模式
(3) 异步加载图片
(4) 快速滑动时不加载图片
(5) 如果自定义的item中有图片,需要处理图片(减少图片所占内存)
a.对图片进行边界压缩 b.用option类来保存图片大小 c.避免图片的实时缩放,最好预先缩放到视图大小
(6)尽量避免在listview适配器中使用线程,因为线程是产生内存泄露的主要原因在于线程的生命周期不可控。
2.应用内存优化
(1)bitmap设置图片大小(优化内存溢出)
BitmapFactory.Option option = new BitmapFactory.Option();
option.inSampleSize = 2; //将视图宽、高都变为原来的1/2
(2)bitmap对象销毁,可以借助recycle()方法让GC回收bitmap对象。
(3)尽量避免static成员变量引用资源消耗过多的实例,如:context
(4)使用Application的context
(5)及时关闭资源,如在查询数据库时需要及时关闭cursor
(6)对经常使用的图片使用软引用保存
(7)线程也是造成内存泄露的一个重要原因,在于线程的生命周期不可控制,解决方法:
a.将线程内部类改为静态内部类
b.用弱引用来保存context引用
(8)使用.9图片
3.什么是ANR 如何避免它?
ANR:Application Not Responding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:
对输入事件(如按键、触摸屏事件)的响应超过5秒
意向接受器(intentReceiver)超过10秒钟仍未执行完毕
Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。
因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成 (或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 — 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程 在即将结束的时候调用它。使用这种方法涉及你的应用程序,能够保证你的程序 对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时 问题。
4.什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?
一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误
5.横竖屏切换时候activity的生命周期?
1)、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2)、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3)、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
6.Android引入广播机制的用意?
a:从MVC的角度考虑(应用程序内)
android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一 种补充关系,引入广播机制可以方便几大组件的信息和数据交互。
b:程序间互通消息(例如在自己的应用程序内监听系统来电)
c:效率上(参考UDP的广播协议在局域网的方便性)
d:设计模式上(反转控制的一种应用,类似监听者模式)
7. Android中如何防止apk被反编译
8. 多线程结合异步回调的使用。
9. Android物种数据存储方式及使用。
10. 解析XML文件的几种方式,及优缺点。
XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方 式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存 中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处 理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。Android的xml文件解析就是通过pull解析的。
11. Android消息处理机制(Handler、Looper)的使用。
12. 如果Activity被回收怎么办?
Activity在销毁时会调用onSaveInstanceState(Bundle bundle)方法,这时可以对数据进行存储,在Activity再次onCreate(Bundle bundle)的时候去获取bundle对象读取数据。
13. MVC的使用。
14. 问项目中会用到什么设计模式,举例等。
15. Android四大组件,是做什么用的
16.如何监听程序crash信息
Activity implement UncaughtExceptHandler 接口
17.anr日志写在哪里的
可以通过命令行获取trace.txt文件
18.tomcat做什么用
把电脑配置成服务器
19.dp、sp什么区别
20.handler机制原理是什么
21.子线程能操作UI吗
子线程不能直接操作UI,但是可以通过以下方法进行操作:
Activity.runOnUiThread()
View.post()
Handler
AsyncTask
22.mvc的理解,在开发时怎么展现
23.用过的第三方框架的原理
24.http请求结果,返回数值的理解
200:请求成功
401:未认证
403:禁止访问
404:找不到指定资源
500:服务器内部错误
504:网关超时
25.activity生命周期
onCreate:初始化数据
onStart:页面可见、不可交互
onResume:页面可见、可交互
onPause:页面可见、不可交互,保存数据
onStop:页面不可见
onDestory:销毁页面
onRestart
26.怎么退出一个应用
System.exit(0);
27.怎么在android 应用里打开浏览器,对应intent要指定什么类型
Intent intent=new Intent("android.intent.action.View");
intent.setData(Uri.prase("www.baidu.com"));
intent.setClassName();//指定浏览器
28.自定义的接口是什么样的
29.post和get的区别
get:用于请求数据,参数附在url后面,http本身对请求长度没有限制,但某些浏览器和服务器对长度有限制
post:用于发生数据,参数放在请求体中,更安全
30.http和https的区别
31.怎么回收String对象
32.怎么进行垃圾回收
33.线程间的通信
34.HashMap和HashTable的区别
HashMap是JDK1.2之后推出的,允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
35.Map的子类
HashMap:无序,不能重复,键可以为null
HashTable:无序,不能重复,键不可以为null
TreeMap:有序,不能