在Android设备中,APP运行在独立的Linux虚拟机中,具有如下的一些特点:


  • Android的APP运行在多用户的Linux系统上,每个APP都被当做是一个不同的用户(user)
  • 默认情况下,系统假定每一个APP都拥有一个独特的 Linux user ID。在系统中,所有文件都需要相应的权限才能够访问,因此,只有拥有相应权限的 user ID 的APP 才能够使用系统的相关资源
  • 每个APP进程(process)都拥有独立的虚拟机(virtual machine),使得Android的APP代码得以独立运行
  • 每个APP都拥有独立的Linux进程。在需要的时候启动,不需要的时候关闭。

        


        Android系统中的最低权限原则(the principle of least privilege):默认情况下,每个APP只能够使用完成自己功能所必须的组建,不必使用其它更多资源。这是的APP得以运行在安全的系统环境中。



        当然,下面是一些让APP之间共享数据和APP使用系统服务的方法:


  • 让两个APP使用相同的 Linux user ID 是允许的。在这种情况下,这两个APP能够访问对方的文件。为了节约系统资源,使用相同 Linux user ID 的APP可以运行在相同的Linux进程中,共享相同的虚拟机,前提是这些APP使用相同的签证(certificate)
  • 所有APP都可以请求使用系统资源,但是必须在创建过程中完成权限配置


        Android的四种基本功能组件:Activities、Services、Content providers、Broadcast receivers。


Activities——单窗口的用户接口(a single screen with a user interface)。每个Activity都是可以独立使用的


Services——后台持续运行的组建,不提供用户接口。可以通过Activity与Service的交互实现打开,或者关闭Service


Content provider——管理APP的交互数据


Broadcast recievers——接收系统的广播信息,不提供用户接口。但是会以 status bar notification 的方式通知用户接收到消息



        Android的一个特色在于任何APP都能够使用其它APP的组件。以使用相机拍照为例,当系统已经有一个相机的拍照程序时,可以直接使用这个APP作为自己设计APP的组建,拍照时,使用这个APP进行拍照,而得到的照片结果返回给自己设计的APP。这样,在用户看来,这个过程使用的是一个APP。



        Android中,可以通过 Intent 启动其它组件。但是,content provider 不能够通过 intent 启动。它是通过 ContentResolver启动。以下是一些启动Android组建的方法汇总:


  • Activity可以通过 intent 中的 startActivity()或者 startActivityForResult() 方法实现
  • Service可以通过 intent 中的 startService() 和 bindService() 方法打开和关闭 Service
  • Broadcast可以通过 intent 中的 sendBroadcast(),sendOrderedBroadcast(),或者sendStickyBroadcast() 方法开启
  • Content Provider 可以通过 ContentResolver中的 query() 方法实现