您的位置:首页 > 移动开发 > Android开发

Android开发找工作之前先看看这些知识点吧

2016-04-03 21:41 447 查看

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:有序,不能重复

WeakHashMap:弱引用

IdentityHashMap:无序,可以重复

36.List的子类

37.hashCode和equals区别

equals比较结果相同,hashcode一定相同;hashcode相同,equals比较结果不一定相同


38.如何重写equals方法

Person p1=new Person(“tom”,21);

Person p2=new Person(“tom”,21);

请问p1.equals(p2)的结果是什么?

答案是false,因为object.equals()默认比较的是引用地址,若想要 p1.equals(p2)的结果为true,需要重写equals方法。

39.OOM的处理

oom是内存溢出,一般发生在图片处理时,所以可对图片进行压缩

1.BitmapFactory.option 边界压缩

2.Bitmap.compress() 改变图片存储

3.使用软引用,内存不足时可以释放资源,避免内存溢出

40.java引用类型有那些?分别有什么特点

类、接口、数组

一、从概念方面来说

基本数据类型:变量名指向具体的数值

引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值

二、从内存构建方面来说

基本数据类型:变量在声明之后java就会立刻分配给他内存空间

引用数据类型:它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。

三、从使用方面来说

基本数据类型:使用时需要赋具体值,判断时使用“==”号

引用数据类型:使用时可以赋null,判断时使用equals方法

41.java的异常处理机制有什么优点

第一,当发生错误时,程序不至于崩溃。

第二,当发生错误时,可以在短时间内找到错误所在行,能节省时间。

42.jvm产生内存泄漏的原因是什么

43.如何优化布局?include、merge、viewStub有什么使用场景

标签能够重用布局文件。

标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。

标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。

44.String和StringBuffer有什么区别

StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。

45.try-catch-finally代码块的执行顺序是什么样的

try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }

catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 。catch可以有多个,也可以没有}

finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally 。finally可以没有,也可以只有一个;如果没有catch语句块,那么finally块就是必须的}

46.数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有有length()这个方法。

47.char能不能存储一个中文汉字?为什么?

能。Java中的一个char是2个字节,java采用unicode,2个字节来表示一个字符。一个数字或英文或汉字都是一个字符,只不过数字和英文时,存储的2个字节的第一个字节都为0,就是浪费了点空间。存汉字就占满了2个字节。

48.fragment有什么优缺点?怎么理解activity和fragment的关系?

49.Thread和service的区别

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: