zoukankan      html  css  js  c++  java
  • 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接口


  • 相关阅读:
    前端程序员的进阶
    字符集的知识
    通晓多种编程语言的程序员,真香?
    理解 Docker
    免费开源软件的潜在安全风险
    技术编程人员成长的 9 个段位
    如何更好的设计 RESTful API
    selenium环境搭建:
    自动化测试有哪些?
    删除书籍:
  • 原文地址:https://www.cnblogs.com/riasky/p/3478396.html
Copyright © 2011-2022 走看看