Android面试相关

Android 面试题之Activity(不断更新)

2017-12-05  本文已影响0人  侯蛋蛋_

Android部分(给出重点部分):

1. Activity 系列问题

1.1 请简要介绍Android的四大组件。(会说即可,不用死记硬背)

1.2 Android中Activity, Intent, Content Provider, Service各有什么区别。(说出他们是什么即可)

1.3 Manifest.xml文件中主要包括哪些信息?

1.4 绘制Activity生命周期流程图(Activity的生命周期)

1.4 介绍下不同场景下Activity生命周期的变化过程

1.5 内存不足时系统会杀掉后台的Activity,若需要进行一些临时状态的保存,在哪个方法进行?

Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。

答:onSaveInstanceState() 方法,当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。除非该activity是被用户主动销毁的,通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

1.6 onSaveInstanceState()被执行的场景有哪些:

系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,因此系统都会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则

1.7 两个 Activity 之间跳转时必然会执行的是哪几个方法?

一般情况下比如说有两个 activity,分别叫 A,B,当在 A 里面激活 B 组件的时候, A 会调用 onPause()方法,然后 B 调用 onCreate() ,onStart(), onResume()。

这个时候 B 覆盖了窗体, A 会调用 onStop()方法. 如果 B 是个透明的,或者 是对话框的样式, 就不会调用 A 的 onStop()方法。

1.8 如何将一个 Activity 设置成窗口的样式?

只需要给我们的 Activity 配置如下属性即可。
android:theme="@android:style/Theme.Dialog"

1.9如何退出 Activity?如何安全退出已调用多个 Activity 的 Application?(知道即可)

在需要结束应用时,发送一个特定的广播,每个 Activity 收到广播后,关闭 即可。

//给某个 activity 注册接受接受广播的意图 registerReceiver(receiver, filter)

//如果过接受到的是 关闭 activity 的广播 activity finish()掉

//伪代码
List<Activity> lists ;// 在 application 全局的变量里面 lists = new ArrayList<Activity>();
lists.add(this);
for(Activity activity: lists)
{
       activity.finish();
    }
lists.remove(this); 

2.0 Android 中的 Context, Activity,Appliction 有什么区别?

2.1 Context 是什么?(理解)

1、它描述的是一个应用程序环境的信息,即上下文。

2、该类是一个抽象(abstract class)类,Android 提供了该抽象类的具体实 现类(ContextIml)。

3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作, 例如:启动一个 Activity,发送广播,接受 Intent,信息,等。

附加一张Context继承关系图

这里写图片描述

2.2如何获取当前屏幕Activity的对象?

使用ActivityLifecycleCallbacks

传送地址:

Android 如何获取当前Activity实例对象?

2.3你知道onNewIntent吗?

如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause、onStop 状态的话,其他应用再发送Intent的话,执行顺序为:
onNewIntent,onRestart,onStart,onResume。

2.4 除了用Intent 去启动一个Activity,还有其他方法吗?

使用adb shell am 命令

am启动一个activity
adb shell am start com.example.fuchenxuan/.MainActivity
am发送一个广播,使用action
adb shell am broadcast -a magcomm.action.TOUCH_LETTER

2.5 Android Service与Activity之间通信的几种方式?

2.6 如果新Activity是透明主题时,旧Activity会不会走onStop

不会!

2.7 介绍Activity的几中启动模式,并简单说说自己的理解或者使用场景

2.8 什么是ANR,如何避免他

image.png

2.9 Activity的管理机制

经验总结
面试官问这个问题,想看看大家对Activity了解是否深入,什么是ActivityRecord,什么是TaskRecord,什么是ActivityManagerService,如果这些大家都能说出来,起码是一个好多年工作经验的老司机了,一般很多对Activity的了解还是停留在界面上

Activity的管理机制

简述通过ContentResolver获取ContentProvider内容的基本步骤

基本步骤:

得到ContentResolver类对象:ContentResolver cr = getContentResolver()。
定义要查询的字段String数组。
使用cr.query();返回一个Cursor对象。
使用while循环得到Cursor里面的内容。

Android中如何访问自定义ContentProvider?

通过ContentProvider的Uri访问开放的数据。

SurfaceView和View的区别是什么?

SurfaceView中采用了双缓存技术,在单独的线程中更新界面;View在UI线程中更新界面

你在项目中哪些地方用到了XML?

XML的主要作用有两个方面:数据交换和信息配置。在做数据交换时,XML将数据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理,XML曾经是异构系统间交换数据的事实标准,但此项功能几乎已经被JSON(JavaScript Object Notation)取而代之。当然,目前很多软件仍然使用XML来存储配置信息,我们在很多项目中通常也会将作为配置信息的硬代码写在XML文件中,Java的很多框架也是这么做的,而且这些框架都选择了dom4j作为处理XML的工具,因为Sun公司的官方JavaSE实在不怎么好用。Android里的布局文件和配置文件都用的XML。

Android中定义style和theme的区别

经验总结:

一般面试官问这样

不同点:

两者总结一句就是:相对而言Theme是作用于全局的,而Style是作用于局部的。定义方式一样,使用的地方不一样。

相同点:

都位于values文件夹下的style.xml中,定义的方法一样,都是控制UI的一堆属性。

如何打开res raw目录中的数据库文件

面试经验:

一般面试官问到raw这个问题,都会在扩展下问问raw和assets的区别,所以这个地方也大家需要注意下

答案解析:

android raw与assets区别

  1. 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
  1. res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。

  2. res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

  1. 读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

  2. 读取assets下的文件资源,通过以下方式获取输入流来进行写操作

上一篇 下一篇

猜你喜欢

热点阅读