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

英文全称:Android Interface Define Language(Android接口定义语言)。

当A进程要去调用B进程中的service并实现通信时,我们通常都是通过AIDL来操作的。

基本操作步骤:

在A工程中某个目录下(如com.lovo.aidlservice)下创建一个aidl文件(如RemoteService.aidl),在里面自定义一个接口,含有get方法,ADT插件会在gen目录下自动生成一个RemoteService.java文件,该类中含有一个名为RemoteService.stub的内部类,该内部类中含有aidl文件接口的get方法。

自定义一个MyService类继承Service,在MyService类中自定义一个内部类去继承RemoteService.stub这个内部类,实现get方法。在onBind方法中返回这个内部类的对象,系统会自动将这个对象封装成IBinder对象,传递给他的调用者。

然后需要在配置文件中配置该service(需要指明action参数,以便下面B工程访问)。

将A工程中的RemoteService.java文件拷贝到B工程对应目录,在bindService方法中绑定aidl服务,就是将RemoteService的ID作为intent的action参数。

注意:若我们访问的远程服务属于系统的,比如黑名单挂断电话,这时只需将其aidl拷贝到工程的对应目录下即可。

AIDL既能处理简单类型的数据也能处理复杂类型的数据。

具体示例请参考:http://blog.csdn.net/u010142437/article/details/9273115

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

访问指定页面可以通过Uri 来确定。

对于指定浏览器:

1、默认浏览器:

在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。

Intent intent =new Intent();

intent.setAction("android.intent.action.VIEW");

Uri content_url =Uri.parse("http://www.163.com");

intent.setData(content_url);

startActivity(intent);

2、指定浏览器:

如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接。

另外,也可以发送显示Intent来启动浏览器。如下面就是启动Android原生浏览器的例子:

Intent intent =new Intent();

intent.setAction("android.intent.action.VIEW");

Uri content_url =Uri.parse("http://www.163.com");

intent.setData(content_url);

intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");

startActivity(intent);

注:要启动其他浏览器只需修改intent.setClassName()里面的参数就OK了。

常见的浏览器:
uc浏览器":"com.uc.browser", "com.uc.browser.ActivityUpdate“

opera浏览器:"com.opera.mini.android", "com.opera.mini.android.Browser"

qq浏览器:"com.tencent.mtt", "com.tencent.mtt.MainActivity"

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

退出单个activity使用finish即可。

退出多个activity的方式有很多种,我经常使用的有以下几种:

1、自定义一个Application子类,里面提供一个集合专门存放所有的activity,另外提供两个方法,一个用来往集合增加activity,另一个用来销毁集合中所有的activity即退出应用程序。这样其他activity启动后就可以添加到该集合中,需要退出应用程序时,调用该Application类的退出程序的方法行了。这种方式易于理解,操作也方便。

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

3、创建一个专门用来退出应用程序的activity,该activity不包含任何有关业务的操作,当需要结束应用程序时,跳转到该activity,并同时设置intent的flags为Intent.FLAG_ACTIVITY_CLEAR_TOP,这样该activity所在栈上面的所有activity都将销毁,然后销毁那个空白的activity即可。

示例可见:http://blog.csdn.net/u010142437/article/details/9398041

三十四、IntentService 的好处

参考示例:http://blog.csdn.net/u010142437/article/details/12063907

http://blog.csdn.net/u010142437/article/details/12063451

三十五、根据自己的理解描述下Android数字签名

在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处。
(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。
(2)有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。
(3)可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共享概功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature,则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。
在签名时,需要考虑数字证书的有效期:
(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。
(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。
(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。
Android数字证书包含以下几个要点:
 (1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
 (2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
 (3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。
 (4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

android面试题之六的更多相关文章

  1. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18) eoe上看到的

    ===============eoeAndroid社区推荐:======================= 1.Android开发新浪面试题[开发者必看哦]下载地址 http://www.eoeand ...

  2. 安卓Android面试题大全

    56个问题都是经常用到的,可以深入研究下,也是必须掌握的开发必备知识. 安卓Android面试题汇总 搜集了一些Android面试题目,供将要面试或者正在面试的朋友参考. 1, 谈谈你对Activit ...

  3. Android 面试题总结

    Android 面试题总结(不断更新) 1.INETNT几种有关Activit的启动方式FLAG_ACTIVITY_BROUGHT_TO_FRONT 将ACTIVITY带到最前面FLAG_ACTIVI ...

  4. Android面试题整理【转载】

      面试宝典(5)  http://www.apkbus.com/android-115989-1-1.html 面试的几个回答技巧 http://blog.sina.com.cn/s/blog_ad ...

  5. 19、android面试题整理(自己给自己充充电吧)

    (转载,出处丢失,请原作者原谅,如有意见,私信我我会尽快删除本文) JAVA 1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问 ...

  6. Android面试题基础(转)

    71道经典Android面试题和答案 1.下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释 ...

  7. Android面试题(文章内容来自他人博客)

    腾讯面试题 1.int a = 1; int result = a+++3<<2; 2.int a = 2; int result = (a++ > 2)?(++a):(a+=3); ...

  8. android面试题集1

    Android 面试题(有详细答案) 附带答案,共100分 一.选择题(30题,每题1.5分,共45分) 1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分类,按功 ...

  9. Android面试题收集(有具体答案)

    Android面试题目及其答案 1.Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每个Android应用程序都在它自己的进程中执行,都 ...

随机推荐

  1. X Shell 4配色方案[Solarized Dark]

    X Shell 4是个很好的Windows下登录Linux服务器的终端,比Putty好用 X Shell 4的下面这种方案,我个人很喜欢 用vim写shell脚本的效果: 按如下步骤配置: 1)把下面 ...

  2. cocos2d-x CCAction(转载)

    接触开发2d后,越来越多的用到动作的内容,看到一篇关于动作比较完整的文章,最主要的是动作的类图,从类图可以更加的理解各个类之间的继承的关系,以及使用更容易的去应用 . 文章有一些方法已经被修改了,现在 ...

  3. Linux中的小程序—— 进度条

    在说正事之前,首先科普一下在什么是回车什么是换行? 我们通常所说的回车就是从一行的末尾跳到另一行的开头,但事实上这却是由回车和换行两个动作所完成的,也就是键盘上<enter>所完成的工作. ...

  4. USB挂起与唤醒.

    USB可见设备状态分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态.所谓可见,即U ...

  5. mybatis 与 反射

    Mybatis是个优秀的ORM框架,所以它的反射层一定不会让我们失望 图比较大,可以开新页面查看 可以看到,Mybatis对这一块抽象的比较复杂,我们可以看到有几个比较主要的部分:Reflector. ...

  6. 解决:用PivotGridControl 与 chartControl 配合使用,Series最大只显示10条

    修改 PivotGridControl  控件的 OptionsChartDataSource.MaxAllowedSeriesCount 的值就可以了  默认为10条

  7. css margin重叠

    父子元素margin(垂直方向)重叠 解决办法: 给子元素添加浮动属性,相应父元素添加必要的清浮动属性: 给父元素添加边缘属性,如padding.border: 同级元素margin(垂直方向)反向重 ...

  8. iOS调节系统音量

    目录[-] 使用MPVolumeView 编程实现系统音量调节2 通过MPVolumeSlider的实例来操作系统音量 有问题!我不喜欢系统弹出音量提示 还有问题,我修改了系统音量但是不是通过我的UI ...

  9. uva 10994 - Simple Addition

    //组合数学 //计算sum{i从右往左数的第一个非0数字,p<=i<=q}. #include <cstdio> typedef long long ll; ll sum(l ...

  10. 学习npm和gulp的一些资料,先记着明天接着学习

    Unix命令行程序和内建指令(百度百科) 将less编译成css的gulp插件 淘宝cnpm镜像 gulp教程之gulp-less gulp入门指南 查找npm的package.json的name配置 ...