查看原文
其他

这些Android面试题,你值得收藏

2017-02-23 androidstarjack 终端研发部

最新Android面试题

  • 1、Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出 runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?

    会,比如nullpointerException。我遇到过,比如textview.setText()时,textview没有 初始化。会导致程序无法正常运行出现forceclose。打开控制台查看logcat信息找出最新 Android面试题异常信息并修改程序。

  • 2、IntentService有何优点?

    Acitivity的进程,当处理Intent的时候,会产生一个对应的Service; Android的进程 处理器现在会尽可能的不kill掉你;非常容易使用

  • 3、如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存 当前状态?

    重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在 activity被回收之前调用。通过重写onRestoreInstanceState()方法可以从中提取保存好的数据

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

    <activity>中配置:android :theme="@android:style/Theme.Dialog" 另外 android:theme="@android:style/Theme.Translucent" 是设置透明

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

    对于单一 Activity 的应用来说,退出很简单,直接 finish()即可。

    当然, 也可以用 killProcess()和 System.exit()这样的方法。 对于多个 activity,

    但是要注意的是:
    同样可惜的是

    该方法是非公 开的,他只能运行在系统进程,第三方程序无法调用。 因为需要在 Android.mk 中添加 LOCAL_CERTIFICATE := platform。 而 Android.mk 是用于在 Android 源码下编译程序用的。 从以上可以看出,

    • 在 2.1 之前,可以使用 ActivityManager 的 restartPackage 方法。 它可以直接结束整个应用。在使用时需要权限 android.permission.RESTART_PACKAGES。 注意不要被它的名字迷惑。 可是,在 2.2,这个方法失效了。

    • 在 2.2 添加了一个新的方法,killBackground Processes(), 需要权限 android.permission.KILL_BACKGROUND_PROCESSES。可惜的是,它和 2.2 的 restartPackage 一样,根本起不到应有的效果。 另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法, forceStopPackage()。它需要权限 android.permission.FORCE_STOP_PACKAGES。并且 需要添加 android:sharedUserId="android.uid.system"属性

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

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

    • 3、递 归退出:在打开新的 Activity 时使用 startActivityForResult,然后自己加标 志,在 onActivityResult 中处理,递归关闭。为了编程方便,最好定义一个 Activity 基类,处理这些共通问题。

  • 在 2.2,没有办法直接结束一个应用,而只能用自己的办法间接办到。 现提供几个方法,供参考:

    除了第一个,都是想办法把每一个 Activity都结束掉,间接达到目的。但是这样做同样不完 美。你会发现,如果自己的应用程序对每一个 Activity都设置了 nosensor,在两个 Activity 结束的间隙,sensor 可能有效了。但至少,我们的目的达到了,而且没有影响用户使用。 为了编程方便,最好定义一个 Activity基类,处理这些共通问题。

    • 1、抛异常强制退出: 该方法通过抛异常,使程序 Force Close。 验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出 Force Close 的窗口。

    • 2、记录打开的 Activity: 每打开一个 Activity,就记录下来。在需要退出时,关闭每一个 Activity 即可。 -3、发送特定广播: 在需要结束应用时,发送一个特定的广播,每个 Activity 收到广播后,关闭即可。

    • 4、递归退出 在打开新的 Activity 时使用 startActivityForResult,然后自己加标志,在 onActivityResult 中处理,递归关闭。

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

    全称是:AndroidInterface Define Language

    在 Android 中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到 Service.

    在不同的进程中, 怎样传递对象呢?显然, Java中不允许跨进程内存共享.因此传递 对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在 J2EE 中,采用RMI 的方式, 可以通过序列化传递对象.在 Android 中, 则采用 AIDL 的方式. 理论上 AIDL 可以传递 Bundle,实际上做起来却比较麻烦。

  • 引入AIDL 的相 关类.;

    • 调用aidl 产生的 class.

    • AIDL(AndRoid 接口描述语言)是一种借口描述语言;

    • 编译器可以通过aidl 文件生成一段代 码

    • 通过预先定义的接口达到两个进程内部通信进程的目的.

    • 如果需要在一个 Activity中, 访 问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数),

    • 然后使用 AIDL 来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.

    • AIDL 的 IPC 的机制和 COM 或 CORBA 类似, 是基于接口的,但它是轻量级的。

    • 它使用代 理类在客户端和实现层间传递值.

    • 如果要使用 AIDL, 需要完成 2 件事情:

  1. 引入AIDL 的相 关类.;

AIDL 的创建方法: AIDL

语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。 由于远程调用的需要, 这些参数和返回值并不是任何类型. 下面是些 AIDL 支持的数据类型:

    1. 不需要 import 声明的简单 Java 编程语言类型(int,boolean 等)


    2. String, CharSequence 不需要特殊声明


    3. List, Map 和 Parcelables 类型,这些类型内所包含的数据成员也只能是简单数据类型, String 等其他比支持的类型.

  • 7、请解释下Android程序运行时权限与文件系统权限的区别。

    运行时权限 Dalvik(android 授权) 文件系统 linux 内核授权

  • 8、系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

    通过直接发送 Uri 把参数带过去,或者通过 manifest 里的 intentfilter 里的 data 属性

  • 9、android系统的优势和不足

    Android 平台手机 5 大优势:
    5 大不足:
    • 一、安全和隐私 由于手机 与互联网的紧密联系,个人隐私很难得到保守。除了上网过程中经意或不经意留 下的个人足迹,Google 这个巨人也时时站在你的身后,洞穿一切,因此,互联网的深入将 会带来新一轮的隐私危机。

    • 二、首先开卖 Android 手机的不是最大运营商 众所周知,T-Mobile 在 23日,于美国纽约发布 了 Android 首款手机 G1。但是在北美市场, 最大的两家运营商乃 AT&T 和 Verizon,而目前所知取得 Android 手机销售权的仅有 T-Mobile 和 Sprint,其中 T-Mobile 的 3G 网络相对于其他三家也要逊色不少,因此,用户 可以买账购买 G1,能否体验到最佳的 3G 网络服务则要另当别论了! 三、运营商仍然能够影响到 Android 手机在国内市场,不少用户对购得移动定制机不满,感觉所购的手机被人涂画了广告一般。这样的情况在国外市场同样出现。Android 手机的另一发售运营商 Sprint 就将在其机型中内置其 手机商店程序。

    • 四、同类机型用户减少 在不少手机论坛都会有针对某一型号的子论坛,对一款手机的使用心得交流,并分享软件资 源。而对于 Android 平台手机,由于厂商丰富,产品类型多样,这样使用同一款机型的用户 越来越少,缺少统一机型的程序强化。举个稍显不当的例子,现在山寨机泛滥,品种各异,就很少有专门针对某个型号山寨机的讨论和群组,除了哪些功能异常抢眼、颇受追捧的机型以外。

    • 五、过分依赖开发商缺少标准配置 在使用 PC 端的 Windows Xp 系统的时候,都会内置微软 Windows Media Player 这样一个 浏览器程序,用户可以选择更多样的播放器,如 Realplay 或暴风影音等。但入手开始使用 默认的程序同样可以应付多样的需要。在 Android 平台中,由于其开放性,软件更多依赖第 三方厂商,比如 Android 系统的 SDK 中就没有内置音乐 播放器,全部依赖第三方开发,缺 少了产品的统一性。

    • 一、开放性 在优势方面,Android 平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到 Android 联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富, 一个崭新的平台也将很快走向成熟。开放性对于 Android 的发展而言,有利于积累人气,这 里的人气包括消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。

    • 二、挣脱运营商的束缚 在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。从去年 iPhone 上市 ,用户可以更加方便地连 接网络,运营商的制约减少。随着 EDGE、HSDPA 这些2G 至 3G 移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈,当你可以通过手机 IM软件方便地进行即时聊天时,再回想不久前天价的彩信和图铃下载业务,是不是像噩梦一样?互联网巨头Google 推动的 Android 终端天生就有网络特色,将让用户离互联网更近。

    • 三、丰富的硬件选择 这一点还是与 Android 平台的开放性相关,由于 Android 的开放性,众多的厂商会推出千奇 百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件 的兼容,好比你从诺基亚 Symbian 风格手机 一下改用苹果 iPhone ,同时还可将 Symbian 中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移,是不是非常方便呢?

    • 四、不受任何限制的开发商 Android 平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如可控制正是留给 Android 难题之一。 五、无缝结合的 Google 应用 如今叱诧互联网的 Google 已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google 服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而 Android 平台手机将 无缝结合这些优秀的 Google 服务。 再说 Android 的

  • 10、Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

    DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥 有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认 为是同一个概念。

  • 11、sim卡的EF文件是什么?有何作用

    sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操 作系统,EF就是作存储并和手机通讯用的

  • 12、嵌入式操作系统内存管理有哪几种, 各有何特性

    页式,段式,段页,用到了MMU,虚拟空间等技术

  • 13、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

    嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的 速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系 统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用 于工业控制、军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这 就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于 linux 内核的,因此属于软实时。

  • 14、一条最长的短信息约占多少byte?

  • 中文70(包括标点),英文160,160个字节。

    • 15、有一个一维整型数组int[]data保存的是一张宽为width,高为height的图 片像素值信息。请写一个算法,将该图片所有的白色不)像素点透明(0xffffffff 的透明度调整为50%。

    • 16、如何将SQLite数据库(dictionary.db文件)与apk文件一起发布

      可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件 复制到res aw目录中

    • 17、如何将打开res aw目录中的数据库文件?

      在 Android 中不能直接打开 res aw 目录中的数据库文件,而需要在程序第一次启动时 将该文件复制到手机内存或 SD 卡的某个目录中,然后再打开该数据库文件。 复制的基本方法是使用 getResources().openRawResource 方法获得 res aw 目录中资源的 InputStream 对象,然后将该 InputStream 对象中的数据写入其他的目录中相应文件中。在 Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase 方法来打开任意目录中 的 SQLite 数据库文件。

    • 18、DDMS和TraceView的区别? DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是 程序性能分析器

    • 19、java中如何引用本地语言 可以用JNI(java native interface java 本地接口)接口

    • 20、谈谈Android的IPC(进程间通信)机制

    • IPC 是内部进程通信的简称,是共享"命名管道"的资源。

    • Android 中的 IPC 机制是为了 让 Activity 和 Service 之间可以随时的进行交互,故在 Android 中该机制,只适用于 Activity 和 Service 之间的通信,类似于远程方法调用,类似于 C/S 模式的访问。

    • 通过定义 AIDL 接 口文件来定义 IPC 接口。Servier 端实现 IPC 接口,Client 端调用 IPC 接口本地代理。

    • 21、NDK 是什么

      • NDK 是一些列工具的集合

      • NDK 提供了一系列的工具,帮助开发者迅速的开发 C/C++的动 态库

      • 并能自动将 so 和 java 应用打成 apk 包。

      • NDK 集成了交叉编译器,并提供了相应的 mk文件和隔离 cpu、平台等的差异

      • 开发人员 只需简单的修改 mk文件就可以创建出 so

    • 22.一道简单不易的算法题

      int  a = 10;        int b=5;      怎么在不引入其他变量的情况下,让a和b互换?    ```  public class Test {     int  a = 10;       int b=5;  public static void main(String[] args) {     a = a+b;     b=a-b;     a =a-b;     System.out.println("b="+b);     System.out.println("a="+a);   }  }  ----输出:  b=10  a=5        ```
    • 23.你最近几年的计划是什么?

      希望技术达到一个层次,成为一个技术方面的专家

    如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部

    (欢迎关注学习和交流)

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存