面试准备之--Android

面试问题:

1. Android四大组件

Android四大组件分别为

  • activity
    1)一个Activity通常就是一个单独的屏幕(窗口)。
    2)Activity之间通过Intent进行通信。
    3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
  • service
    service用于在后台完成用户指定的操作。service分为两种:

(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。

(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

(2)startService()与bindService()区别:

(a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。

(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

(3)开发人员需要在应用程序配置文件中声明全部的service,使用标签。

(4)Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

  • content provider
    android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。

(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。

(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

(4)开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。

(5)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

  • broadcast receiver。广播接收者

2. activity 的生命周期

面试准备之--Android
Activity的简单生命周期流程为onCreate();→onStart();【注:此时Activity处于不可见状态】→onResume();【注:此时Activity处于运行状态】→onPause();【注:此时Activity处于暂停状态】→onStop();【注:此时Activity处于停滞状态】→onDestroy();【注:调用了此方法后Activity生命周期结束】
其中当Activity正在重新启动的时候,从不可见变为可见的时候,会调用到onRestart();也就是说一个Activity包含七个生命周期流程

3. 旋转屏幕会发生什么

旋转屏幕时,Android会销毁当前activity并按照横屏尺寸重新构造activity。但是为了保留当前activity的数据,会在销毁前调用onSaveInstanceState存储当前数据,再oncreate()前调用onRestoreInstanceState进行数据的恢复。