android面试题四

32.RuntimeException中的异常

NullPointerException , ClassCastException , ArithmeticException,
IllegalArgumentException , IndexOutOfBoundsException


33.Math.round():四舍五入函数


34.运算符的优先级

 .、[ ]、()                         域运算、数组下标、分组括号
++、--、-、!、~                 单目运算
New、(类型)                        分配空间、强制类型转换
*、/、%                                乘、除、求余运算
+、-                                      加减运算
<<、>>、>>>                       位运算
<、<=、>、>=                     小于、小于等于、大于、大于等于
==、!=                                  相等、不相等
&                                           按位与
^                                            按位异或
|                                            按位或
&&                                        短路逻辑与
||                                           短路逻辑非
?:                                          条件运算符
赋值运算符


35.Android应用程序结构有哪些

Applications(应用程序),Application Framework(应用程序框架),
Libraries(c/c++库,为平台的不同组件所使用),
Android Runtime(Android运行时,包括核心库和Davlik虚拟机两部分),
Linux Kernel(Linux内核)


36.如何退出activity?如何安全退出已调用多个activity的Application?

单一的activity调用finish()即可。当然,也可以用killProcess()

对于多Activity的应用来说:
(1)抛出异常,强制退出
(2)发送特定广播
     在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可
(3)递归退出
    在打开新的Activity时使用startActivityForResult,然后自己加标识,在onActivityResult中处理,递归关闭。
(4)记录打开的Activity
    每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。


37.请介绍下content provider是如何实现数据共享的

一个程序可以通过实现一个content provider的抽象接口将自己的数据完全暴露出去,而且content provider是以类似数据库中表的方式将数据暴露,也就是说content provider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。外部访问通过ContentResolver去访问并操作这些被暴露的数据。

(创建一个属于你自己的content provider或者或者将你的数据添加到一个已经存在的content provider中,前提是有相同数据类型并且有写入content provider的权限。?)


38.请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。

拿主线程来说,主线程启动时会调用Looper.prepare(),会初始化一个Looper,放入ThreadLocal中,接着调用Looper.loop()不断遍历Message Queue,Handler的创建依赖于当前线程中的Looper,如果当前线程没有Looper,则必须调用Looper.prepare()。Handler sendMessage到Message Queue,Looper不断从Message Queue中取出消息,回调handleMessage()。


39.如果有个100M大的文件,需要上传至服务器,而服务器form表单最大只能上传2M,可以用什么方法。

使用Http协议上传数据,特别是在android下,跟form没什么关系。传统的在web中,在form中写文件上传,其实浏览器所做的就是将我们的数据进行解析组拼成字符串,以流的方式发送到服务器,且上传文件用的都是POST方式,POST方式对大小没什么限制。

假设每次真的只能上传2M,那么可能我们只能把文件截断,然后分别上传了。


40.AsyncTask使用在哪些场景,它的缺陷是什么,如何解决。

AsyncTask运用的场景就是我们需要进行一些耗时的操作,耗时操作完成之后更新主线程,或者在操作过程中对主线程的UI进行更新。

缺陷:AsyncTask维护着一个长度为128的线程池,同时可以执行5个工作线程,还有一个缓冲队列,当线程池中已有128个线程,缓冲队列已满时,如果此时向线程提交任务,将会抛出RejectedExcutionException。

在3.0以前,最大支持128个线程的并发,10个任务的等待。在3.0以后,无论有多少任务,都会在其内部单线程执行。

解决:由一个控制线程来处理AsyncTask的调用判断线程池是否满了,如果满了则线程睡眠否则请求AsyncTask继续执行。



41.Activity用sharedPreferences保存数据,大小有没有限制

数据以xml文件形式存储  大小应该没有明确的限制 但是手机上每一个应用所占的最大内存一般是16M。而且使用sharedPreferences在内存中也会存储Editor对象。所以保存的数据应尽量少。


42.Activity间通过intent传递数据大小有没有限制

512K以下:正常传输(可能稍有差别)
512K-1024K:程序闪退,数据出错
1024K以上:TransactionTooLargeException


43.assets文件夹里放文件,对于文件的大小有没有限制

早期时因为设备硬件原因aapt在编译时对两个文件夹大小做出了限制。现在应该不会出现这种情况,理论上只要打包不超过Android APK 50M大小的限制都没有问题。


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

从主界面点击图标进入

是因为启动程序(主界面也是一个app),发现了在这个程序中存在一个设置为<category android:name="android.intent.category.LAUNCHER"/>的activity,所以这个launcher会把icon提出来,放在主界面上。当用户点击icon的时候,发出一个Intent:
Intent intent = mActivity.getPackageManager.getLauncherIntentForPackage(packageName);
mActivity.startActivity(intent);

再看看其他程序跳过去

跳过去可以跳到任意允许的页面,如一个程序可以下载,那么真正下载的页面可能不是首页(也可能是首页),这时构造一个Intent。这个intent中的action可能有多种,view,download都有可能。系统会根据第三方程序向系统注册的功能,为你的intent选择可以打开的程序或页面。

所以唯一的一点不同的是从icon的点击启动的intent的action是相对单一的,从程序中跳转可能样式更多一些,本质没有区别。


45.Android dvm 的进程和Linux的进程是否是同一概念

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



46.简要解释一下activity , intent , intent filter , service , broadcast , broadcast receiver

activity:呈现了一个用户可以操作的可视化用户界面。在Android中,Activity是所有程序的根本,所有程序的流程都
              运 行在Activity之中。


intent: Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数   
            据、附加数据进行描述。Android则根据此intent的描述,负责找到对应的组件,将intent传递给调用的组件,
            并 完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/service之间的交互。因
            此,intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息。实现调用者与被调用者之间的
            解耦。


intent filter: intent过滤器,每个过滤器描述组件的一种能力以及该组件可以接收的一组Intent。过滤器中包含的域与
                    Intent对象中动作、数据和分类域相对应。

service:在后台执行长时间运行操作并且不提供用户界面的应用程序组件。

broadcast:是一种广泛应用在应用程序之间传输信息的机制。

broadcast receiver:对发送出来的broadcast进行过滤接收并响应的一类组件。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值