Android面试题大全(3)

2020-02-21 17:45

? ? ? ? ? At the time of a call into the system, to prevent an application from executing certain functions. When starting an activity, to prevent applications from launching activities of other applications.

Both sending and receiving broadcasts, to control who can receive your broadcast or who can send a broadcast to you.

When accessing and operating on a content provider. Binding or starting a service.

在应用安装的时候,package installer会检测该应用请求的权限,根据该应用的签名或者提示用户来分配相应的权限。在程序运行期间是不检测权限的。如果安装时权限获取失败,那执行就会出错,不会提示用户权限不够。大多数情况下,权限不足导致的失败会引发一个 SecurityException, 会在系统log(system log)中有相关记录。 (5)权限继承/UserID继承

当我们遇到apk权限不足时,我们有时会考虑写一个linux程序,然后由apk调用它去完成某个它没有权限完成的事情,很遗憾,这种方法是行不通的。前面讲过,android权限是经营在进程层面的,也就是说一个apk应用启动的子进程的权限不可能超越其父进程的权限(即apk的权限),即使单独运行某个应用有权限做某事,但如果它是由一个apk调用的,那权限就会被限制。实际上,android是通过给子进程分配父进程的UserID实现这一机制的。

(三)常见权限不足问题分析

首先要知道,普通apk程序是运行在非root、非system层级的,也就是说看要访问的文件的权限时,看的是最后三位。另外,通过system/app安装的apk的权限一般比直接安装或adb install安装的apk的权限要高一些。

言归正传,运行一个android应用程序过程中遇到权限不足,一般分为两种情况: (1)Log中可明显看到权限不足的提示。

此种情况一般是AndroidManifest.xml中缺少相应的权限设置,好好查找一番权限列表,应该就可解决,是最易处理的情况。有时权限都加上了,但还是报权限不足,是什么情况呢?Android系统有一些API及权限是需要apk具有一定的等级才能运行的。比如

SystemClock.setCurrentTimeMillis()修改系统时间,WRITE_SECURE_SETTINGS权限好像都是需要有system级的权限才行。也就是说UserID是system。

(2)Log里没有报权限不足,而是一些其他Exception的提示,这也有可能是权限不足造成的。比如:我们常会想读/写一个配置文件或其他一些不是自己创建的文件,常会报java.io.FileNotFoundException错误。系统认为比较重要的文件一般权限设置的也会比较严格,特别是一些很重要的(配置)文件或目录。如

-r--r----- bluetooth bluetooth 935 2010-07-09 20:21 dbus.conf drwxrwx--x system system 2010-07-07 02:05 data

dbus.conf好像是蓝牙的配置文件,从权限上来看,根本就不可能改动,非bluetooth用户连读的权利都没有。/data目录下存的是所有程序的私有数据,默认情况下android是不允许普通apk访问/data目录下内容的,通过data目录的权限设置可知,其他用户没有读的权限。所以adb普通权限下在data目录下敲ls命令,会得到opendir failed, Permission denied的错误,通过代码file.listfiles()也无法获得data目录下的内容。 上面两种情况,一般都需要提升apk的权限,目前我所知的apk能提升到的权限就是system(具体方法见:如何使Android应用程序获取系统权限), 42. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?

答案当然是:肯定的。 具体方法如下:

Intent intent = new Intent();

intent.setAction(\

Uri content_uri_browsers = Uri.parse(\intent.setData(content_uri_browsers); intent.setClassName(\\startActivity(intent);

43. 对多线程的运用和理解,及多线程之间handle的传值。 44. 对android虚拟机的理解,包括内存管理机制垃圾回收机制。

45. Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。 46. android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。 47. 如何加载的音乐信息,如何改善其效率。 48. ListView如何提高其效率?

49. 启动应用后,改变系统语言,应用的语言会改变么?

50. 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么

区别?

51. Android程序与JavaME程序的区别?

一.区别: 1.Android是一个完整的移动设备操作系统,由linux操作系统,中间件,C类库和核心应用程序组成。 2.java Me是java的一个微型版本,针对移动设备开发应用程序的开发包,它必须有底层操作系统支持。

二.联系: 1.可以说其实它们是没什么关系。 2.非要找关系的话就是:都是用java语言编写应用程序。

三.各自的优势: 1.Android的优势在于开发性和开源,是一个优秀的移动设备操作系统。 2.Java Me 是一个移动设备软件开发包,跨平台是其主要特点。 不少学生对这个很感兴趣,还有一些疑问,特进一步说明: 其实它们真是没什么关系,只是编写应用的话都是Java语法。Android本身是个手机操作系统,它有多层结构组成,其中应用层是用Java语言开发的,语法当然一样,不过Android有自己的API,可喜的是有不少API android直接使用的就是Java API,只是运行环境不一样了。JavaME是Java的一个版本,跨平台和JavaSE的原理是一样的,它的运行需要JRE,操作系统支持的。比如你在NOKIA使用JavaME开发不仅需要虚拟机还需要它的操作系统支持。最少应该清楚一点:Android应用程序不能在JavaME环境下运行,JavaME程序也不能直接在Android里运行,因为它们都有自己的API。

52. Android中Task任务栈的分配。

53. 在Android中,怎么节省内存的使用,怎么主动回收内存? 54. 不同工程中的方法是否可以相互调用?

55. 在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电? 56. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

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

sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的 58. 如何判断是否有SD卡?

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

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

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

android:name=\ < !-- 往SDCard 写入数据权限 -->

< uses-permission android:name=\/>

Environment.getExternalStorageState().equals(Enviroment.MEDIA_MOUNTED) Environment.getExternalStorageState() 方法用于获取SDCard 的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。 59. 嵌入式操作系统内存管理有哪几种, 各有何特性。 页式,段式,段页,用到了MMU,虚拟空间等技术 60. 如何将打开res aw目录中的数据库文件?

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

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

62. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

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

中文70( 包括标点) ,英文160 ,160 个字节。 64. Linux中跨进程通信的几种方式 。 65. 谈谈对Android NDK的理解。 NDK是一系列工具的集合

NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库,并能自动将so和java应用打成apk包

NDK集成了交叉编译器,并提供了相应的mk文件和隔离cpu,平台等的差异,开发人员只需简单的修改mk文件就可以创建出so 66. 谈谈Android的优点和不足之处。

67. Android系统中GC什么情况下会出现内存泄露呢? 1). 数据库的 cursor 没有关闭

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

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

3). Bitmap 对象不使用时采用recycle() 释放内存 68. Android UI中的View如何刷新。 \\

Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。 1).不使用多线程和双缓冲

这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用 View的onDraw()方法。

2).使用多线程和不使用双缓冲

这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Only the originalthread that created a view hierarchy can touch its views.

这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMessage(Messagemsg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法 )。也就是说:在新线程创建并发送一个Message,然后再主线程中捕获、处理该消息。 3).使用多线程和双缓冲

Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。 69. 简单描述下Android 数字签名。 70. 什么是ANR 如何避免它?

ANR : Application Not Responding ,五秒

在 Android 中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时, Android 就会显示 ANR 对话框了: 对输入事件 ( 如按键、触摸屏事件 ) 的响应超过 5 秒 意向接受器 (intentReceiver) 超过 10 秒钟仍未执行完毕

Android 应用程序完全运行在一个独立的线程中 ( 例如 main) 。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发 ANR 。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播 (Intent broadcast) 。

因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如 onCreate() 和 onResume() 等更应如此。潜在的比较耗时的操作,如访问网


Android面试题大全(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:LED显示屏控制软件操作说明书(灵信V3.3)(精)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: