美文网首页
Android 3.22面试题

Android 3.22面试题

作者: 我要离开浪浪山 | 来源:发表于2021-11-17 14:20 被阅读0次

1. 面向对象的三大特征

封装,继承,多态

2. 简述OverLoading(重载)和Override(重写)的区别

override(重写)

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload(重载)

1、参数类型、个数、顺序至少有一个不相同(多态的一种)。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。

3. 说明String和StringBuffer,StringBuilder的区别:

运行速度快慢为:StringBuilder > StringBuffer > String

String最慢的原因:

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

再来说线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

4. 汉字字符 2字节,英文字符 1字节,中文标点 2字节,英文标点 1字节

5. Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?

有两种实现方法, 分别是继承 Thread 类与实现 Runnable 接口 用 synchronized 关键字修饰同步方法

第一种:new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类的实例对象, 子类加上 run 方法后的代码如下:

new Thread(){

 public void run(){

  }  }.start();

第二种: new Thread(new Runnable(){}).start();这表示调用 Thread 对象接受的 Runnable 对象的 run方法, new Runnable(){}表示一个 Runnable 的匿名子类的实例对象,runnable 的子类加上 run 方法后的代码如下:

new Thread(new Runnable(){
    public void run(){
     }    
 }).start();       

6. 列出Android的四大组件

Activity,service,content provider,broadcast receiver

7.Android的6大布局

六大界面布局方式包括: 线性布局(LinearLayout)、框架布局(FrameLayout)、表格布局(TableLayout)、相对布局(RelativeLayout)、绝对布局(AbsoluteLayout)和网格布局(GridLayout) 、约束布局。

8. Android五大存储

  • 1.SharedPreferences方式
  • 2.SQLite数据库方式
  • 3.内容提供器(Content provider)方式
  • 4.文件存储方式
  • 5.网络存储方式

9. Activity中一般重载哪几个方法用来维护其生命周期。

Activitiy的生命周期方法主要有七个:onCreate()、onRestart()、onStart()、onResume()、onPause()、onStop()、onDestory()。

10.Android中的动画有几类,他们的特点和区别是什么?

有3种

  • a. Tween(补间动画):这种实现方式可以使视图组件移动、放大、缩小以及透明度的变化(假的,点击效果没有变)
  • b. Frame(帧动画):通过顺序的播放图片来实现,类似电影
  • c. 属性动画:补间动画只是显示位置的改变,点击事件仍在原处,而属性动画控件移动后事件相应就在就在移动后的本身处理。

11. Android中Pading和margin有什么不同?

padding是在控件内部的 margin是在控件外部的

12. 在单线程中模型中,Message,Handler,Message Queue,Looper之间的关系。

  • Looper:是一个消息分发器,在主线程创建的时候就会创建一个Looper对象;**

  • MessageQueue :消息队列,是由Message组成的一个队列;**

  • Handler :获取到Message,然后执行动作,可以在主线程和子线程中互相传递数据;**

在主线程创建之后会创建一个Looper对象,创建Looper对象的时候会去创建一个MessageQueue,而Looper是一个轮询器,会不停的轮询MessageQueue中的消息,在获取到消息之后就会把这个消息交给相应的handler来进行处理,在主线程中创建一个handler对象,这个handler对象把一个Message放到消息队列中,然后获取到消息进行处理。

13. 简述一下LaunchMode的几种模式

  • a.standard模式
    在Activity的栈中无论该活动有没有加入栈,活动就会被创建。

  • b.singleTop模式
    只要被创建的活动不位于栈的顶部,该活动就会被创建入栈。如果将要被创建的活动位于栈的顶部,该活动的实例就不会被创建

  • c.singleTask模式
    在单任务模式下MainActivity已经在栈中,就会把它之前的Activity出栈,使其处于在栈顶活跃的位置。

  • d.singleInstance
    可以看成单例模式,这个比较特殊,被设置成singleInstance的Activity将会放入另一个栈中,因为这样为了便于共用。上面3中模式位于同一个栈中。

14. 怎么实现跨进程访问?

startActivity, sendBroadcast,startService 使用都比较简单。通常使用在传递简单消息,通知另外一个进程。异步并且得不到反馈。AIDL是android推荐使用的,但是客户端调用稍微复杂,不利于接口封装(客户端必须先bind,然后才可以调用)。Messenger实际上是在AIDL的基础上进行了封装。可以更好的结合handler来使用,相对较为简单,但是也存在不利于接口封装的问题。本文我们主要想讲下provider来实现跨进程调用。

15. Android事件分发机制:

背景1:传递函数: dispatchTouchEvent。用于传递事件,本函数被定义在View中,ViewGroup重写了该函数。

背景2:拦截函数:onInterceptTouchEvent。用于拦截事件,本函数被定义在ViewGroup中。

背景3:消费函数1:onTouch。用于传递过来的事件消费掉,本函数是OnTouchLisener里面的需要被重写的函数。

背景4:消费函数2:onTouchEvent。同用于消费事件,本函数被定义于View中,比onTouch晚执行一步,可能不会执行。

16. 描述Android应用进程的启动及Activity的显示

根Activity一般就是指我们项目中的MainActivity,代表了一个android应用程序,一般也是在一个新的进程中启动起来。在Android系统中,所有的Activity组件都保存在堆栈中,我们启动一个新的Activity组件就位于上一个Activity的上面。那么我们从桌面(Launcher)打开一个App是一个怎样的过程呢,如下所示:

(1)Launcher向ActivityManagerService发送一个启动MainActivity的请求;
(2)ActivityManagerService首先将MainActivity的相关信息保存下来,然后向Launcher发送一个使之进入中止状态的请求;
(3)Launcher收到中止状态之后,就会想ActivityManagerService发送一个已进入中止状态的请求,便于ActivityManagerService继续执行启动MainActivity的操作; (4)ActivityManagerService检查用于运行MainActivity的进程,如果不存在,则启动一个新的进程;
(5)新的应用程序进程启动完成之后,就会向ActivityManagerService发送一个启动完成的请求,便于ActivityManagerService继续执行启动MainActivity的操作; (6)ActivityManagerService将第(2)步保存下来的MainActivity相关信息发送给新创建的进程,便于该进程启动MainActivity组件。

17. 简述Android启动过程

Android系统在启动时首先会启动Linux基础系统,然后引导加载Linux Kernel并启动初始化进程(Init)。接着启动Linux守护进程。在启动Linux守护进程的同时还需要启动Zygote进程。包括初始化一个Dalvik虚拟机实例。装载Socket请求所需的类和监听。创建虚拟机实例来管理应用程序的进程。

  在Zygote之后需要初始化runtime进程。在这个过程中主要进行服务管理器的初始化和注册。

相关文章

  • Android 3.22面试题

    1. 面向对象的三大特征 封装,继承,多态 2. 简述OverLoading(重载)和Override(重写)的区...

  • Android面试题

    Android面试必备: (一)、Java面试题 (二)、Android面试题 (三)、Android高级面试题

  • 面试题

    关注的面试题文集 Android面试题整理 Android工程师面试题大全 Android 面试题总结之Andro...

  • Android面试总结二

    参考文章 40个Android面试题Java面试题集Android名企面试题及知识点整理Android面试题收集较...

  • Android 面试题(重点2)

    掘金官网Android面试题 Android 动画 Android 动画Android面试题 算法和数据结构 设计...

  • Android主流框架面试准备

    MVP Android MVP架构搭建史上最全的Android MVP模式架构面试题集锦Android面试题-架构...

  • Android面试题汇总

    面试题汇总 Android复习资料——Android知识点汇总(一) 史上最全的Android面试题集锦 ForA...

  • Android 面试题汇总

    一、Android面试题 Android面试题包括Android基础,还有一些源码级别的、原理这些等。所以想去大公...

  • Android面试

    [toc] Android面试题 Android面试题除了Android基础之外,更多的问的是一些源码级别的、原理...

  • Android面试题

    二、Android面试题 Android面试题包括Android基础,还有一些源码级别的、原理这些等。所以想去大公...

网友评论

      本文标题:Android 3.22面试题

      本文链接:https://www.haomeiwen.com/subject/ksmltrtx.html