Android 面试题
1. equals与==的区别???
1.1 对于基本数据类型,==比较的是值是否相等
1.2 对于引用数据类型,== 比较的是对象内存地址是否一致,equal是Object类中的一个方法,在该类中,equals的实现也仅仅只是比较两个对象的内存地址是否相等,但在一些子类中,如:String、Integer 等,该方法将被重写,比较的就是内容值是否相等了
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
String str2 = new String("abc");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
```
以上代码将会输出
true
true
false
true
2.String是最基本的数据类型吗?
不是
java中的基本数据类型就有八中: byte short int long float double char boolean
应用数据类型
3.float f = 1.1 ;正确吗???
不正确,1.1是双精度,将双精度赋值给浮点型,属于向下转型,会造成精度的丢失.如果要强制类型转换,可以写成这样 float f = (float)1.1; 或者 float f=1.1F;
4.Activity 生命周期???
Activity的生命周期方法主要有七个:onCreate()、onRestart()、onStart()、onResume()、onPause()、onStop()、onDestory()。
5.Activity 启动模式???
standard :(标准模式) 每次启动一个新的Activity 就会在任务栈顶创建新的实例对对象,一个任务栈中可以有多个相同的Activity实例
singleTop:(单一栈顶模式) 每启动一个新的 Activity 就会看任务栈顶是否存在该Activity ,如果任务栈顶存在该Activity 则直接复用栈顶Activity,反之则重新创建
singleTask:(单一任务模式) 每启动一个新的Activity 就会看任务栈中是否已经存在该Activity实例对象,如果存在则直接将该Activity 之上的Activity实例对象移除栈顶,直接复用已存在的Activity对象,反之则重新创建
singleInstance:(单一任务栈模式) 每启动一个新的Activity 就会在新的任务栈中创建Activity 实例对象
6.Android中常用的五种布局???
FrameLayout(框架布局) LinearLayout(线性布局) AbsoluteLayout(绝对布局) RelativeLayout(相对布局) TableLayout(表格布局)
7.Andrioid中的动画有哪几类,区别和特点???
两种:一种是Tween动画、一种是Frame动画
Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化
另一种是Frame动画通过一定的顺序播放排列好的图片来实现,类似电影
8.android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别?
XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。
9.Service 两种启动方式和区别???
4.1 startService
4.1.1 定义一个类继承Service
4.1.2 在Manifest.xml
文件中配置该Service
4.1.3 使用Context的startService(Intent)
方法启动该Service
4.1.4 不再使用时,调用stopService(Intent)
方法停止该服务
使用这种start方式启动的Service的生命周期如下:
onCreate()
--->onStartCommand()
(onStart()
方法已过时) ---> onDestory()
说明:如果服务已经开启,不会重复的执行onCreate()
, 而是会调用onStart()
和onStartCommand()
。服务停止的时候调用 onDestory()
。服务只会被停止一次。
特点:一旦服务开启跟调用者(开启者)就没有任何关系了。开启者退出了,开启者挂了,服务还在后台长期的运行。开启者不调用服务里面的方法。
4.2 bindService
Service
4.2.2 在
Manifest.xml
文件中配置该Service
4.2.3 使用
Contex
t的bindService(Intent, ServiceConnection, int)
方法启动该Service
4.2.4 不再使用时,调用
unbindService(ServiceConnection)
方法停止该服务
onCreate()
--->onBind()
--->onunbind()
--->onDestory()
注意:绑定服务不会调用onstart()
或者onstartcommand()
方法
特点:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。绑定者可以调用服务里面的方法。
绑定本地服务调用方法的步骤:
1. 在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
2. 实现服务的onbind方法,返回的就是这个内部类
3. 在activity 绑定服务。bindService();
4. 在服务成功绑定的回调方法onServiceConnected, 会传递过来一个 IBinder对象
5. 强制类型转化为自定义的接口类型,调用接口里面的方法。
View的绘制流程 : OnMeasure()→ OnLayout()→ OnDraw()