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

    4.2.1  定义一个类继承Service
    4.2.2  在Manifest.xml文件中配置该Service
    4.2.3  使用Context的bindService(Intent, ServiceConnection, int)方法启动该Service
    4.2.4  不再使用时,调用unbindService(ServiceConnection)方法停止该服务
 
    使用这种start方式启动的Service的生命周期如下:

    onCreate() --->onBind()--->onunbind()--->onDestory()

    注意:绑定服务不会调用onstart()或者onstartcommand()方法    

    特点:bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。绑定者可以调用服务里面的方法。

    绑定本地服务调用方法的步骤:

      1.  在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法

      2.  实现服务的onbind方法,返回的就是这个内部类

      3.  在activity 绑定服务。bindService();

      4.  在服务成功绑定的回调方法onServiceConnected, 会传递过来一个 IBinder对象

      5.  强制类型转化为自定义的接口类型,调用接口里面的方法。

10.View 的绘制流程???
    View的绘制流程 : OnMeasure()→   OnLayout()→   OnDraw()
    OnMeasure() :
      测量视图大小.从顶层父view到子view递归调用measure方法,measure方法又回调OnMeasure.
    OnLayout () :
      确定view的位置,进行页面布局.从顶层view向子view的递归调用view.layout方法的过程,即父view根据上一步measure子view所得到的布局大小和参数,将子view放在合适的位置.
    OnDraw() :
      绘制视图:ViewRoot创建一个Canvas对象,然后调用OnDraw().六个步骤:
      1.绘制视图的背景 2.保存画布的图层(layout) 3.绘制view的内容 4.绘制view子视图,如果没有就不用. 5.还原图层(layout) 6.绘制滚动条. 
 
11.事件的传递机制???
    6.1 Android事件分发机制的本质是解决:点击事件是由哪个对象发出,经过哪些对象,最终达到哪个对象并最终得到处理.这里的对象是指Activity  ViewGroup   View
    6.2 Android中事件的分发顺序:Activity(Window)  →  ViewGroup  →  View
    6.3事件分发过程由 dispatchTouchEvent()  onInterceptTouchEvent()  和 onTouchEvent() 三个方法协助完成
12.Android 中数据的存储方案???
    使用SharedPreferences 存储数据
    文件存储数据
    SQLite数据库存储数据
    使用ContentProvider存储数据
    网络存储数据
 
  
    


posted @ 2018-03-21 09:34  monkey0928  阅读(331)  评论(0编辑  收藏  举报