Android面试题整理(1)

1、Activity的生命周期
     onCreate(Bundle saveInstanceState):创建activity时调用。
     onStart():activity可见时调用
     onResume():activity与用户交互时调用
     onRestart():当一个activity再次启动之前调用该方法
     onPause():当前暂停、或调用另一个activity之前调用该方法。
     onStop():当前activity变为不可见时调用该方法
     onDestory():当前activity被销毁之前调用该方法
2、横竖切换时候Activity的生命周期
     不设置activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏
时会执行一次,切竖屏时会执行两次
     设置activity的android:configChanges="orientation"时,切屏会重新调用各个生命周期
但切横屏与竖屏都之会执行一次
    设置activity的android:configChanges="orientation|keybordHidden"时,切屏不会
重新调用各个生命周期,只会执行onConfigurationChanged方法
3、如何将一个activity设置成窗口模式。
  将activity的属性android:theme="@style/Theme.Dialog"
4、当后台的activity被系统回收怎么办
  系统会帮我们记录下回收前activity的状态,再次调用被回收的activity就要重新调用
onCreate()方法,不同直接启动的是这次onCreate()里是带参数的savedInstanceSate;一般
可以判断其是否为null,不为null时可以使用它来恢复到回收前的状态。
5、如何退出activity?如何安全退出已调用的多个activity的application
  用finish()方法退出activity
  在结束应用时,发送一个特定的广播,相对应的activity收到广播后,关闭即可。
6、后台的activity由于某种原因被系统回收了,如何在被系统回收之前保存当前的状态
  被回收之前调用的onSaveInstanceState()方法保存当前的状态
7、怎么在启动一个activity时就启动一个service
  将启动的service的语句放在onCreate()方法中。
8、Activity怎么和Service绑定,怎么在activity中启动自己对应的Service
   Activity能进行绑定得益于Service的接口。在实现Service必须实现onBind方法
   Service和Activity的连接可以用ServiceConnection来实现。在实现一个新的ServiceConnection
,重写onServiceConnected和onServiceDisconnected方法,一旦连接建立,就能得到Service实例的引用。
   执行绑定,调用bindServcie方法,传入一个选择了要绑定的Service的Intent和一个实现了的ServiceConnection实例
9、什么是Service以及描述下它的生命周期
   Service是运行在后台的android组件,没有用户界面,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序的上下
文里。
   Service随着启动形式的不同,其生命周期稍有差别。当用Context.startService()来启动时,Service的生命周期依次为:oncreate——>
onStartCommand——>onDestroy 当用Context.bindService()启动时:onStart——>onBind——>onUnbind——>onDestroy
10、Service有哪些启动方法,有什么区别,怎么停用Service?
   Service启动方式有两种;一是Context.startService和Context.bindService。
   区别是通过startService启动时Service组件和应用程序没多大的联系;当用访问者启动之后,如果访问者不主动关闭,Service就不会关闭,Service组件之间
因为没什么关联,所以Service也不能和应用程序进行数据交互。而通过bindService进行绑定时,应用程序可以通过ServiceConnection进行数据交互。在实现Service
时重写的onBind方法中,其返回的对象会传给ServiceConnection对象的onServiceConnected(ComponentName name, IBinder service)中的service参数;也就是说获取
了serivce这个参数就得到了Serivce组件返回的值。Context.bindService(Intent intent,ServiceConnection conn,int flag)其中只要与Service连接成功
conn就会调用其onServiceConnected方法
   停用Service使用Context.stopService
11、不用Service,B页面为音乐播放,从A跳到B,再返回,如何使音乐继续播放?
   A使用startActivityForResult方法开启B,B类结束时调用finish;A类的Intent有一个子Activity结束事件onActivityResult,在这个事件里继续播放音乐。
12、什么是IntentService?有何有点?
  IntentService也是一个Service,是Service的子类;
  IntentService和Service有所不同,通过Looper和Thread来解决标准Service中处理逻辑的阻塞的问题
   优点:Activity的进程,当处理Intent的时候,会产生一个对应的Service,Android的进程处理器现在会尽可能的不kill掉你。
13、什么时候使用Service?
  比如播放多媒体的时候用户启动了其他的Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,在或者在后台记录你地理位置的改变等等
14、说说Activity、Intent、Service是什么关系
  一个Activity通常是一个单独的屏幕,每一个Activity都被实现为一个单独的类,这些类都是从Activity基类中继承来的,Activity类显示有视图控件组成的用户接口
,并对视图控件的事件做出响应。
Intent的调用是用来进行架构屏幕之间的切换的。Intent是描述应用想要做什么。Intent数据结果中最重要的部分是动作和动作对应的数据,一个动作对应一个动作数据。Android
 Service是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序的上下文里。需要通过某一个Activity或其他Context对象来调用。 Activity
跳转到Activity,Activtiy启动Service,Service打开Activity都需要Intent表明跳转的意图,以及传递参数,Intent是这些组件间信号传递的传承者。
15、请介绍ContentProvider是如何实现数据共享的
ContentProvider是通过提供Uri来实现数据共享
16、请介绍下android的数据存储方式
   Android提供了5种方式存储数据
 使用SharedPreferences存储数据;
 文件存储数据;
 SQLite数据库存储数据
 使用ContentProvider存储数据;
 网络存储数据
17、android中常用的五种布局
  线性布局LineayLayout、相对布局RelativeLayout、帧布局FrameLayout、表格布局TablElAYOUT,绝对布局AbsoluteLayout。
18、谈谈UI中,Padding和Margin有什么区别?
  Padding是文字相对于边框,而Margin是边框相对于父窗体
19、请解释一下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。
  子线程借用主线程里面的handler发送一条消息,这个消息会被线程放入消息队列里面,也就是message queue,主线程里面有一个轮询器looper会发现
消息队列里面有一条消息时,会调用handler消息处理执行handlermessage的方法去处理这个消息,这个handlemessage的方法可以更新ui控件内容了
20、AIDL的全称是什么?如何工作?能处理哪些类型的数据?
  ADIL是一种接口定义语言,用于约束两个进程之间的通信规则,供编译器生成代码,实现android设备之间的进程通信。
  进程之间的通信信息首先会被转换成AIDL协议消息,然后发送给对方,对方受到AIDL协议消息后在转换成相应的对象。AIDL支持类型包括java基础类型和String,List,Map,CharSequence,如果
使用自定类型,必须实现Parcelable接口


原文地址:https://www.cnblogs.com/riasky/p/3478396.html