android经典面试题(1)

1ListView的优化
(1)背景色与cacheColorHint设置相同颜色

(2)ListView中item的布局至关重要,必须尽可能的减少使用的控件,布局。RelativeLayout是绝对的利器,通过它可以减少布局的层次。同时要尽可能的复用控件,这样可以减少ListView的内存使用,减少滑动时GC次数。

(3)ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能。ListView中getView是性能是关键,这里要尽可能的优化。

(4)法中不能做复杂的逻辑计算,特别是数据库操作,否则会严重影响滑动时的性能。

2Handler机制
(1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
(2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里,或者接收Looper(从Message Queue取出)所送来的消息。
(3)Message Queue(消息队列),用来存放线程放入的消息。
(4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。
3ui上的优化
(1)尽量使用系统定义的资源,可以减小部分工作量,减少安装包的大小。
(2)减少一个布局的不必要节点尽量使用RelativeLayout
(3)尽量重用一个布局文件include属性
(4)复用style复用定义的样式
(5)软键盘的弹出控制,不要让其覆盖输入框

4内存泄露的原因
android 每一个项目运行都会在dalvic里面,系统会给每一个项目分配18m或者24m内存,跟系统有关,当超出这个限制就会包outofMemary内存溢出错误,虽然有内存回收机制但是,回收只会对失去对象的引用做垃圾回收,所以经常会出现很多的问题。
(1)万恶的static static类型跟类绑定在一起,生命周期特别长贯穿这个项目运行期间,例如static context 绑定activity的东西,集市activity的ondestory方法运行他都不会被释放
(2)线程惹的祸,内部类中线程的run方法里面不执行完,activity仍然不会被释放,当横屏的时候,之前的activity仍然不会释放
(3)图片资源会占很多内存,用完之后都要recycle掉,如果无关紧要的话可以显示他的小分辨率图片,效果差不多的情况下,如果没有保留引用的话就用软引用.
(4)cursor查询大量的数据后会占用大量的资源,一定要关闭掉。
(5)不要使用整张整张的图,使用.9.png图片,adapter使用converView复用布局等等,
(6)调用registerReceiver()后未调用unregisterReceiver()
(7)关闭输入输出流
没有办法android内存不给力,只能千方百计去优化内存。

5强引用,软引用,弱引用,虚引用之间的关系
      (1)强应用StrongReference是通用的默认的,当用户不把对象设置成null的话,系统宁愿抛oom异常也不会垃圾回收这个对象的。
    (2)软引用SoftReference当系统内存不足的时候对象就会设置成空的垃圾回收就会回收他的。
      (3)弱引用WeakReference系统每次发现弱引用都会回收他的,不管内存是否充足。  
      (4)虚引用PhantomReference它并不影响对象的生命周期。在java中用类表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收可以记录垃圾回收的过程。
6网络优化
(1)避免频繁网络请求
    访问server端时,建立连接本身比传输需要跟多的时间,如非必要,不要将一交互可以做的事情分成多次交互(这需要与Server端协调好)。有效管理Service 后台服 务就相当于一个持续运行的Acitivity,如果开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通 常情况下,可以使用AlarmManager来定时启动服务。如下所示,第30分钟执行一次。
(2)数据压缩
传输数据经过压缩 目前大部门网站都支持GZIP压缩,所 以在进行大数据量下载时,尽量使用GZIP方式下载,可以减少网络流量,一般是压缩前数据大小的30%左
(3)使用线程池
   线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待。
(4) 选择合适的数据格式传输形式
7你理解的java语言
(1)平台无关性
平台无关性是指Java能运行于不同的平台。Java引进虚拟机 原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与 机器无关,Java虚拟机(Java Virtual Machine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能, 提供于不同平台的接口的。
(2)安全性
Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。
(3)面向对象
Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。
(4)分布式
Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。
(5)健壮性
Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Byte code校验等功能。
(6)解释型
我们知道C,C++等语言,都是针对CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CPU有关。Java不像C或C++,它不针对CPU芯片进行编译,而是把程序编译成称为自字节码的一种“中间代码”。字节码是很接近机器码的文件,可以在提供了java虚拟机(JVM)的任何系统上被解释执行。
(7)动态
java程序的基本组成单元就是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分部环境中动态的维护程序及分类,而不像C++那样,每档期类库升级以后,如果想让程序具有新类库提供的功能,就需要修改程序,重新编译。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值