Android 面试

Android 基础

  • Android 系统架构


    安卓系统架构
  • Applications:应用程序
  • Application Framework:组件和服务API
  • Libraries、Runtime:即 c/c++ 函数库部分,大多数都是开放源代码的函数库,例如 webkit;android 的 runtime 负责解释和执行生成的dalvik格式的字节码
  • Linux Kernal:硬件驱动程序:网络、电源、系统安全以及内存管理等功能
  • 简单介绍Android四大组件
  • Activity:Activity 是 Android 程序与用户交互的窗口,主要做界面展示和一些持久化的事情
  • Service:后台服务,定义好需要接受的 Intent 提供同步和异步的接口,常用于处理一些常驻、耗时的操作
  • Content Provider:是 Android 提供的第三方应用数据的访问方案,可以派生 Content Provider 类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的接口模型
  • BroadCast Receiver:广播,接收一种或者多种 Intent 作触发事件,接受相关消息,做一些简单处理,转换成一条 Notification,统一了Android的事件广播模型
  • Android中常用的五种布局
  • FrameLayout:框架布局,所有东西依次都放在左上角,会重叠
  • LinearLayout:线性布局,可垂直和水平布局
  • AbsoluteLayout:绝对布局,绝对布局用X,Y坐标来指定元素的位置
  • RelativeLayout:相对布局,按参照物布局
  • TableLayout:表格布局,每一个TableLayout里面有表格行TableRow
  • Activity 生命周期
Activity生命周期
  • Fragment 生命周期

  • Service 如何使用?生命周期?

  • 如何使用:
* 继承。 XXService extends Service
* 配置。在 AndroidManifest 文件中的<application>节点里对 XXService 进行配置
* 启动。Context.startService() 或者 Context.bindService()
  • 生命周期:

    • startService():生命周期直至stopService;如果调用startService() 方法前服务已经被创建,多次调用startService() 方法并不会导致多次创建服务,但会导致多次调用 onStart() 方法
    • bindService():生命周期直至unbindService();调用者退出时会自动调用unbindService();如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)
  • BroadCast Receiver 注册方式、不同之处

  • 注册方式:XXXReceiver extends BroadcastReceiver
* 第一种:全局广播:AndroidManifest 中注册
       <receive android:name=".XXXReceiver " >
         <intent-filter>
           <action android:name="android.provider.Telephony.SMS_RECEIVED")
         <intent-filter>
       <receiver>
* 第二种:局部广播:代码注册
       IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
       XXXReceiver receiver = new XXXReceiver();
       registerReceiver(receiver, filter);
  • 优缺点

    • 第一种:全局有效
    • 第二种:局部有效
  • Activity启动模式

    可以通过AndroidManifest.xml中的android:launchMode属性设置

    • standard:默认模式。在这个模式下,都会默认创建一个新的实例。
  • singleTop:可以多个示例。如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

  • singleTask:只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

  • singleInstance:只有一个实例。并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

  • 横竖屏切换时候Activity发生了什么?
  • 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
  • 设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
  • 设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
  • 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
  • 保存:重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity被回收之前调用
  • 获取:通过重写onRestoreInstanceState()方法可以从中提取保存好的数据
  • Android 的数据存储方式

使用 SharedPreferences 存储数据、文件存储数据、SQLite 数据库存储数据、使用 ContentProvider 存储数据、网络存储数据

  • SharedPreferences 存放目录:/data/data/Package Name/Shared_Pref。以键值对形式存储简单配置信息

  • 文件存储目录:/data/data/Package Name/files。 I / O 读写

  • SQLite存储目录:/data/data/Package Name/database

  • CP:向其它应用共享数据,基于Uri

  • 网络存储:post,get请求同步数据

  • Android 中的动画有哪几类,它们的特点和区别是什么

两种,一种是 Tween 动画、还有一种是 Frame 动画

  • Tween 动画:这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化
  • Frame 动画:传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影

Android 进阶

  • 单线程模型中 Message、Handler、Message Queue、Looper 之间的关系

简单的说,Handler 获取当前线程中的 Looper 对象,Looper 用来从存放 Message 的 MessageQueue 中取出 Message,交由 Handler 进行 Message 的分发和处理

  • Handler 获取当前线程中的 Looper 对象,调用 Looper.prepare() 方法
  • Handler sendMessage() 到 MessageQueue
  • Handler 调用 Looper.loop()不断遍历 Message Queue,取出Message
  • Handler 回调 handleMessage() 处理这个Message
  • Handler 处理完该 Message 后,Looper 则设置该 Message 为NULL,以便回
    ![Uploading MVC 模式_824399.png . . .]
  • 备注:当 Handler 对象的构造函数的参数为空,则为当前所在线程的 Looper; Looper.getMainLooper() 得到的是主线程的 Looper 对象,Looper.myLooper() 得到的是当前线程的 Looper 对象
  • Activity 是如何生成一个 view 的?
  • Activity在attch方法的时候,会创建一个phonewindow(window的子类)
  • onCreate中的setContentView方法,会创建DecorView

  • DecorView 的 addview() 方法,会把 layout 中的布局加载进来

  • Android 中如何捕获未捕获的异常

  • 关键是实现Thread.UncaughtExceptionHandler
  • MVC、MVP、MVVM差异
  • MVC(环形通信)
    MVC 是 Model,View,Controller的缩写,MVC包含三个部分
  • M:数据加工,耗时操作、网络操作等,eg:util
  • V:用户界面,接收用户的输入,显示处理结果,eg:xml
  • C:桥梁作用,接收V层数据,交由M层处理,eg:activity
![MVC 模式](http://upload-images.jianshu.io/upload_images/3688153-44f8efc13bb57971.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/800)
  • MVP(双向通信)

    • View 与 Model 不发生联系,都通过 Presenter 传递
    • View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里
    MVP 模式
  • MVVM

    • 基本上与 MVP 模式完全一致
    • 唯一的区别是,它采用双向绑定:View的变动,自动反映在 ViewModel,反之亦然


      MVVM.png
  • 什么是ANR,产生原因,如何避免?

Android ANR

  • AIDL的全称是什么?如何工作?

全称是:Android Interface Define Language
在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享.
因此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则
采用AIDL的方式. 理论上AIDL可以传递Bundle,实际上做起来却比较麻烦。
AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要
在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用
这些参数组装成自己需要的对象.AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL,
需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.
AIDL的创建方法:
AIDL语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。 由于远程调用的需要, 这些参数和返回值并不是任何类型.
下面是些AIDL支持的数据类型:
1.不需要import声明的简单Java编程语言类型(int,boolean等)
2.String, CharSequence不需要特殊声明
3.List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其他比支持的类型.

  • NDK 是什么

NDK是一些列工具的集合,NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库,并能自动将so和java 应用打成apk包。
NDK集成了交叉编译器,并提供了相应的mk文件和隔离cpu、平台等的差异,开发人员只需简单的修改mk文件就可以创建出so

  • 持续更新中。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,433评论 25 707
  • 内容来之网络,因为看到布局太乱,重新整理下,并对答案做了一些修改。如果有侵权,请给我私信。谢谢。 1.下列哪些语句...
    蝴蝶之梦天使阅读 1,524评论 2 22
  • 1, 英才汇聚文学院 俺们来自大滑县 今天展示来点啥 三句半 2 俩月国培来置换 心系学生两为难 纠结痛苦不能走 ...
    幸福人生云阅读 307评论 0 0
  • NSTimer: self 持有 timer,timer 在初始化时持有 self,造成循环引用。 解决的方法就是...
    sundancer阅读 752评论 0 1
  • 今天参加了光明书院的活动,感觉很不错,说不错感觉跟我平时练的不一样,平时练功我总是挺舒服的,这次完全不一样,不过好...
    心我听你说阅读 147评论 0 0