首页 > 程序开发 > 移动开发 > 其他 >

移动开发面试时所遇到过的各种面试题

2017-06-19

移动开发面试时所遇到过的各种面试题。一、Android四大组件及作用;二、Android中常用的5种布局;三、Android的数据存储方式;四、activity的启动模式;五、android中的动画;六、AIDL全名;七、ANR是什么;八、Fragment和activity通信

移动开发面试时所遇到过的各种面试题

一、Android四大组件及作用

Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑

service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事物,定义好需要接受的Intent提供同步和异步的接口

Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径

BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型

二、Android中常用的5种布局

1、LinearLayout (线性布局)

线性布局是应用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来定位。默认情况下为垂直方式定位。可以通过android:orientation来修改布局方式,其中horizontal为水平布局,vertical垂直布局。

2、RelativeLayout(相对布局)

相对布局,是根据另外一个组件或是顶层父组件的位置来确定下一个组件的相对位置,该方法使用时会更加灵活。

3、FrameLayout (幁布局,也可以称为框架布局)

放入其中的所有元素都被放置在最左上的区域,而且无法为这些元素指定一个确切的位置,每一个控件的放置会覆盖在上一个控件的上面。

4、TableLayout(表格布局)

顾名思义,表格布局就类似于日常生活中所见的表格排布,类似Html里面的Table

三、Android的数据存储方式

1、使用SharedPreferences存储数据

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它只能存储一些简单的数据保存。

(1)、根据Context获取SharedPreferences对象

(2)、利用edit()方法获取Editor对象。

(3)、通过Editor对象存储key-value键值对数据。

(4)、通过commit()方法提交数据。

2、SQLite数据库存储数据

将数据存储在手机自带的轻量级SQLite数据库中

3、文件存储数据

文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与 Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。

4、网络存储数据

数据存储在后台服务器或云端,当需要使用数据的时候通过网络获取

5、ContentProvider

通过内容提供者能获取本机中数据库之类的。具体本人使用得比较少,当时被问到也直接带过。

四、activity的启动模式

“standard” (默认)

“singleTop”:可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

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

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

五、android中的动画

1、Tween动画(补间动画)

这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化

2、Frame动画。

Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

3、属性动画(该动画在API11后引入)

区别于Tween动画是:Tween动画在视图组件移动后,原视图的点击事件还会留在原地,不会跟随移动。

六、AIDL全名

全称是:Android Interface Define Language

AIDL是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.

七、ANR是什么

ANR全名Application Not Responding,意思是”应用没有响应“。

产生原因:

1.在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)

2.BroadcastReceiver在10秒内没有执行完毕

如何避免ANR?

1、运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等)

2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。(此处需要注意的是可以在广播接受者中启动Service,但是却不可以在Service中启动broadcasereciver,关于原因后续会有介绍,此处不是本文重点)

3、避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。

八、Fragment和activity通信

1、通过Activity中setArgument和Fragment中getArgument方式通信

2、通过接口回调的方式通信

九、请描述下Activity的生命周期。

activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();

可见生命周期:从onStart()直到系统调用onStop()

前台生命周期:从onResume()直到系统调用onPause()

十、mvc模式的原理

mvc是model,view,controller的缩写,mvc包含三个部分:

模型(model):是应用程序的主体部分,所有的业务逻辑都应该写在该层。

视图(view):是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。

控制器(control):是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。

十一、Android程序运行时权限与文件系统权限的区别。

运行时权限Dalvik( android授权)

文件系统 linux 内核授权

十二、Android的IPC(进程间通信)机制

IPC是内部进程通信的简称, 是共享”命名管道”的资源。Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理。

相关文章
最新文章
热点推荐