`
chengfengyang
  • 浏览: 22140 次
社区版块
存档分类
最新评论

android面试

阅读更多
为什么要用ContentProvider?它和sql的实现上有什么差别?

使用ContentProvider  可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri

AIDL的全称是什么?如何工作?能处理哪些类型的数据?


AIDL 是一种接口定义语言,用于约束两个进程间的通信规则,供编译器生成代码,实现Android 设备上的进程间通信。

进程之间的通信信息首先会被转换成AIDL 协议消息,然后发送给对方,对方受到 AIDL 协议消息后再转换成相应的对象。

AIDL 支持的类型包括Java 原生类型和String,List,Map,CharSequence,如果使用自定义类型,必须实现Parcelable 接口

启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?
从主界面启动一个应用 程序是通过快捷方式直接调mainActivity 启动的,从其他应用程序调用需要隐式的通过Action 或者在 Intent 中需要使用setClasss() ,且要写明包路径.


如何判断是否有SD卡?


在程序中访问SDCard,需要申请访问SDCard 的权限

在AndroidManifest.xml 中加入访问SDCard 的权限如下:

<!--在SDCard 中创建与删除文件权限-->

<uses-permission  android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<!-- 往SDCard 写入数据权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Environment.getExternalStorageState().equals(Enviroment.MEDIA_MOUNTED)

Environment.getExternalStorageState() 方法用于获取SDCard 的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。


Android系统中GC什么情况下会出现内存泄露呢?
出现情况 :

1.  数据库的 cursor 没有关闭

2.  构造 adapter 时,没有使用缓存contentview

   衍生listview 的优化问题----减少创建view 的对象,充分使用contentview,可以使用一静态类来优化处理 getView 的过程

3.  Bitmap 对象不使用时采用recycle() 释放内存

4.  Activity 中的对象的生命周期大于Activity

调试方法:  DDMS---->  HEAPSIZE --->dataobject --->  [Total Size]

android 中有哪几种解析xml 的类,它们的原理和区别

DOM 解析

  优点:

       1. XML 树在内存中完整理存储,因此可以直接修改其数据和结构。

      2.  可以通过该解析器随时访问XML树中的任何一个节点.

      3. DOM 解析器的 API 在使用上也相对比较简单

  缺点:     如果XML 文档体积比较大时,将文档读入内存是非常消耗系统资源的。

  使用场景:

   DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C标准.DOM 是以层次结构组织的节点的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能进行工作.DOM 是基于对象层次结构的。

SAX解析

   优点:     SAX 对内存的要求比较低,因为它让开发人员自己来决定所要处理的标签。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。

   缺点:    用SAX 方式进行XML解析时,需要顺序执行,所以很难访问到同一文档中的不同数据。此外,在基于该方式的解析编码过程也相对复杂。

    使用场景: 对于含有数据量十分巨大,而又不用对文档的所有数据进行遍历或者分析的时候,使用该方法十分有效。该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签即可. 

    Xmlpull  解析

    android 提供了xmlpull api ,xmlpull 和sax 类似,是基于流(stream) 操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此xmlpull 和 sax 都比较节约内存资源,不会象DOM 那样要把所有节点以对象树的形式展现在内存中。

    xmlpull 比sax 更简明,而且不需要扫描完整个流.

res目录有默认几项resource
5项, drawable-hdpi,drawable-ldpi,drawable-mdpi,layout,values


handler机制的原理


   Android 提供了 Handler 和 Looper 来满足线程间的通信. Handler 先进先出原则.  Looper 类用来管理特定线程内对象之间的消息交换(Message Exchange)

   (1) Looper:  一个线程可以产生一个Looper 对象,由它来管理此线程里的 Message Queue(消息队列)

   (2) Hanlder: 可以构造 Handler 对象来与 Looper 沟通,以便推送新消息到 Message Queue里,或者接收Looper 从Message Queue 取出所送来的消息.

说说Activity,Intent,Service是什么关系


一个 Activity 通常是一个单独的屏幕,每一个Activity 都被实现为一个单独的类,这些类都是从Activity 基类中继承来的,Activity 类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。

Intent 的调用是用业进行架构屏幕之间的切换的,Intent 是描述应用想要做什么。Intent 数据结构中两个最重要的部分是动作和动作对应的数据,一个动作对应一个动作数据。

Android Service  是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。需要通过某一个Activity 或者其他 Context 对象来调用.

Activity 跳转到 Activity  ,Activity 启动Service ,Service 打开Activity都需要Intent 表时跳转的意图,以及传递参灵敏,Intent 是这些组件间信号传递的承载者。

请描述一下Intent 和 Intent Filter

Intent 在Android 中被翻译为"意图",也就是目的,它们是应用程序四种基本组件——————activity,service和broadcast receiver 之间互相激活的手段。在调用Intent 名称时使用结构全名时为显示调用。这种方式一般用于应用程序的内部调用,因为你不一定会知道别人写的类的全名。关于隐式Intent 的用法,这里有配置Activity 的Intent Filter

<intent-filter> <action  android:name="com.example.project.SHOW_CURRENT" /></intent-filter>

在调用的时候指定Intent 的action,系统就会自动的去对比是哪个 intent-filter 符合相应的Activity,找到后就会启动Activity.

一个intent filter   是 IntentFilter 类的实例,但是它一般不出现在代码中,而是出现在androidManifest.xml文件中,以<intent-filter> 的形式(有一个例外是broadcast receiver 的intent  filter 是使用Context.registerReceiver() 来动态设定的,其intent filter  也是在代码中创建的。)

一个filter  有action,data,category等字段.一个隐式intent 为了能被某个intent filter 接受,必须通过3个测试,一个intent 为了被某个组件接受,则必须通过它所有的intent filter 中的一个。

Service有哪些启动方法,有什么区别,怎样停用Service?


两种启动Service的方式Context.startService()  和 Context.bindService()。 区别为Context.startService():  Service会经历onCreate  ---> onStart(如果Service还没有运行,先调用onCreate()再调用onStart(),如果Service已经运行,则只调用onStart(),所以一个Service的onStart()可能会重复调用多次);停止Service 时直接调用onDestory,如果是调用者自己直接退出而没有停止服务,Service会一直在后台运行。该Service 的调用者再启动起来后可以通过 停止服务关闭Service

Context.bindService():  Service 会经历 onCreate()  ---> onBind(),onBind将返回给客户端一个IBind 接口实例,IBind 允许客户端回调服务的方法,比如得到Service 运行的状态或其他操作。这个时候把调用者(Context,例如) 会和Service绑定在一起,Context 退出了,Service 就会调用onUnbind()---->onDestory()相应退出。

停用service 使用context.stopService()

同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?


可以放在不同的Task中。需要为不同的activity 设置不同的taskaffinity 属性,启动activity 的Intent 需要包含FLAG_ACTIVITY_NEW_TASK标记

横竖屏切换时候Activity的生命周期。

1. 不设置Activity 的android:configChanges时,切屏会重新调用各个生命周期,切模屏时会执行一次,切竖屏时会执行两次

2.  设置Activity 的android:configChanges="orientation" 时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3.设置Activity 的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

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

1、在styles.xml文件中可以新建一个如下类似Dialog的style <style name="Theme.FloatActivity"  parent="android:style/Theme.Dialog" />

2、在AndroidManifest.xml中在你需要显示为窗口的activity 中添加如下属性:

    android:theme="@style/Theme.FloatActiivty" 即可

    也可以直接添加您对应需要展示为Dialog style 的Activity 的android:theme  属性值为android:theme="@android:style/Theme.Dialog"

如何退出Activity?如何安全退出已调用多个Activity的Application?


用finish()方法退出activity.

在2.1 之前,可以使用ActivityManager 的restartPackage()。它可以直接结束整理个应用。在使用时需要权限android.permission.RESTART_PACKAGES.

在2.2, 这个方法失效了,可使用以下几个人工的方法

1. 记录打开的Activity: 每打开一个Activity ,就记录下来。在需要退出时,关闭每一个Activity 即可。

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

后台的Activity被系统回收怎么办?


android 系统会记录下回收前Activity 的状态,再次调用被回收的Activity 就要重新调用onCreate(),不同于直接启动的是这回onCreate()里包括参数savedInstanceState。

使用  savedInstanceState 可以恢复到回收前的状态。

分享到:
评论

相关推荐

    Android面试题(详细答案).pdf

    在准备 Android 面试时,了解和掌握各种知识点至关重要。以下是一些基于提供的面试题内容的详细知识点解析: 1. **Java.IO 流**: - Java.IO 包中的流按照功能分为节点流和处理流。节点流是直接与数据源或目的地...

    2022中高级Android面试必知百题.pdf

    "2022中高级Android面试必知百题"这份资料精炼了大量面试题,重点突出了面试中常见的Java基础问题。以下将详细探讨其中涉及的Java知识点: 1. **抽象类与接口的区别** - 抽象类可以包含抽象方法的实现,而接口只能...

    阿里巴巴Android面试题集(答案解析)1

    阿里巴巴的Android面试题集主要涵盖了计算机基础、数据结构与算法、Java编程、Android技术以及一些扩展领域的知识。以下是对这些知识点的详细解析: **第一章 计算机基础面试题** 这部分通常包括网络、操作系统和...

    Android面试宝典5.0

    在《Android面试宝典5.0》中,内容广泛覆盖了Android开发领域中经常会遇到的面试题目,并且对这些题目进行了深入的分析和解答。书中的内容可以分为几个主要部分: 一、Android基础和高级面试 这部分内容包括对...

    常见的java,android面试题整理

    Java和Android面试题涵盖了许多核心概念,以下是这些知识点的详细说明: 1. **面向对象** (Object-Oriented Analysis and Design Principle, OOADP): 面向对象编程是Java和Android开发的基础,它涉及类、对象、继承...

    android面试四十题

    Android面试四十题是一个精心整理的面试指南,涵盖了移动开发领域中Android面试的常见问题。以下是一些关键知识点的详细解答: 1. Android的四大组件包括:Activity(活动)、Service(服务)、BroadcastReceiver...

    【黑马面试宝典】虐面试官神器之必备黑马程序员Android面试宝典.zip

    Android面试宝典包含两个宝典: 1【黑马项目宝典】虐面试官神器之必备黑马程序员项目宝典V1.1 内容包括:(1)电子商城(2)ListView系列(3)图像处理(4)动画效果(5)控件大全(6)新闻资讯(7)生活相关(8)...

    Android面试宝典4.0

    《Android面试宝典4.0》是一本专门为准备参加Android相关职位面试的求职者准备的面试题集和知识点解析书籍,书中不仅覆盖了Android基础和高级知识点,还包含了Java基础和高级面试内容。此外,书中还涉及面试技巧、...

    2023最新Android 面试篇(2303版).pdf

    2023最新Android面试篇(2303版) 本资源摘要信息涵盖Java基础知识点,主要涉及Java中的数据类型、equals和hashCode方法、基本数据类型和引用类型的区别、多态的理解、String、StringBuffer和StringBuilder的区别等...

    android 面试

    android 面试 1. 请描述下Activity的生命周期。  答:onCreate()Activity第一次加载时调用,用户构建窗体  onStart()Activity能被用户看到时时调用  onResume()Activity能够得到用户焦点时调用  onRestart()...

    Android面试宝典6.0.rar

    《Android面试宝典6.0》是一份针对Java和Android开发者进行面试准备的重要参考资料,它涵盖了从基础到高级的各类Android知识点。这份资料旨在帮助读者系统性地学习和复习,以便在面试中表现出色。 首先,Java是...

    Android 面试基本问题

    在Android面试中,掌握基本知识点和扩展知识点是至关重要的,这不仅体现了候选人的专业素养,也是评估其实际工作能力的标准。下面将详细解释这些知识点。 一、基本知识点 1. 四大基本组件:Activity(活动)、...

    Android面试题整理

    在准备Android面试的过程中,了解和掌握一系列核心知识点是至关重要的。以下是一些基于"Android面试题整理"的详细知识点解析: 1. **Android基础知识** - **Activity生命周期**:理解并能熟练绘制各个状态,包括...

    2018Android面试宝典

    《2018Android面试宝典》是一本专门为Android开发者准备的面试指南,它涵盖了大量在寻找Android开发职位时可能遇到的各种面试问题。这本书旨在帮助求职者深入理解Android平台的核心概念,提高技术实力,以便在面试中...

    android面试宝典源码

    《Android面试宝典源码解析》 在移动应用开发领域,Android系统占据着主导地位,因此对于Android开发者来说,理解并掌握其核心技术是至关重要的。本篇将深度解析"android面试宝典"这一项目,该项目涵盖了Android...

    Android面试复习资料

    在准备Android面试的过程中,了解和掌握相关知识点是至关重要的。以下是对标题和描述中提到的知识点的详细解析,以及它们在面试中的应用和重要性。 1. **J2SE基础**: J2SE(Java Standard Edition)是Java平台的...

    android面试题整理

    以上就是“android面试题整理”中可能涵盖的主要知识点,每个话题都值得深入探讨和实践,以确保在面试中能够全面展示自己的专业能力。通过持续学习和项目实践,开发者可以不断提高自己的技术水平,为面试做好充分...

    Android面试题大全.zip

    《Android面试题大全》这本书籍,作为一款压缩文件,包含了丰富的Android面试相关的知识点,旨在帮助求职者准备Android开发工程师的面试。以下是对其中关键概念和技术的详细解释: 1. **Android系统架构**:理解...

    Android面试宝典.rar

    在Android面试过程中,掌握核心知识点是成功的关键。这份"Android面试宝典"涵盖了广泛的领域,旨在帮助求职者全面准备Android开发职位的面试。以下是一些关键知识点的详细说明: 1. **基础知识**:理解Java语言的...

    Android面试大全.zip

    《Android面试大全》是针对Java基础和Android技术的面试指南,涵盖了从基础知识到进阶技能的广泛内容。这本书旨在帮助Android开发者系统性地复习和掌握面试中可能遇到的关键知识点,以便在求职过程中表现出色。 ...

Global site tag (gtag.js) - Google Analytics