• 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存储数据
        网络存储数据
     
      
        


  • 相关阅读:
    java.lang.OutOfMemoryError: Java heap space解决办法
    android网络图片加载缓存,避免重复加载。
    Android控制软键盘拉起
    mysql create database 指定utf-8编码
    仿黑客帝国文字雨效果
    C++循环去掉文件的后缀名
    使用python读取多重文件夹下的word(doc、docx)文件,并处理存储到excel(xls、xlsx)文件
    Python操作文件夹
    (转载)Python:列表作为参数
    595. Big Countries (Easy)
  • 原文地址:https://www.cnblogs.com/monkey0928/p/8615199.html
Copyright © 2020-2023  润新知