Android API Guides翻译与学习——Application Fundamentals

来源:互联网 发布:怎么下载网站数据库 编辑:程序博客网 时间:2024/05/16 14:59

翻译,不是纯翻译,目的是为了学习和共享。

App Components(应用组件)


android使用java开发的,androidSDK工具编译你的代码,并把编译好的代码和用到的资源和数据一起打包成一个apk文件,也就是安装包。

一旦安装,应用就会在自己独立的小天地里自由自在,安全的活动。


  • android操作系统是多用户的Linux系统,每一个应用都是一个进程(user)
  • 默认情况下,系统给每一个应用分配一个用户id—UID,并且给系统的文件都设置了相应的权限,一个应用想要操作这些文件必须要有相应的权限。
  • 每一个android进程都有它自己的虚拟机—VM,一个用用的代码独立的在这里执行

系统都是在保证应用正常运行的情况下,尽量给予应用最少的权限,应用随意支配自己的资源,但是,如果涉及到系统的话,那它还得看有没有相关的权限。这样做,就能很好的保证系统的安全。

当然,下面的方法就可以让应用之间进行通信,以及让应用可以使用系统的服务。

  • 两个应用可以使用相同的UID,这样就标明了他们是同一个进程可以使用同一个虚拟机VM,然后就可以相互访问了(这种情况下,应用的签名必须一样)。
  • 应用可以获取设备的数据,如:联系人,信息,sd卡内容,蓝牙相机等。但是必须在安装时得到用户的授权。

    四大组件

    下面介绍android的四大组件,只能说四大组件很重要,但也是android的基础。系统可以介入你的应用通过这些组件。每一个组件有他们各自的生命周期和定义的方式。

  • Activities

    activity 它表现出来就是一个用户的界面。例如发邮件的应用。一个activity用来显示邮件的列表,一个activity可能用来发邮件,里一个activity可能用来展现邮件。每一个activity是独立的,可以被除本应用外其他任何应用调起,前提是它允许被其他应用调起。

  • Services

    服务是一个长期在后台运行或者是为远程进程工作的组件。服务不提供一个用户界面。例如,当用户在玩其他应用的时候,服务可以在后台播放音乐;它和activity结合从网上获取数据但是不会阻塞应用。其他组件。例如activity可以开启服务让服务运行,或者绑定服务来和它进行通讯。

  • Content providers

    Content providers(内容提供者),它管理应用中用来分享的数据。你可以把这些用来分享的数据存放到文件系统、数据库、网上等任何你的应用有权访问的存储介质中。通过内容观察者,其他的应用可以访问这些数据,甚至可以修改他们,前提是你的内容观察者允许他们这样做。例如,短信应用就提供了一个内容观察者,其他的应用可以通过这个内容观察者查询短信的内容,甚至还可以修改短信。
    如果你想让其他应用来访问你应用中的数据,你需要定义好相应的APIS(访问你应用的路径和说明),其他应用就可以通过这些apis来访问和操作你应用中 的数据。

  • Broadcast receivers

    Broadcast receivers(广播接受者),它是一个可以在整个系统范围内收发广播的组件。很多的广播都来自系统,例如,屏幕亮时,锁屏时,电量低时,截屏时,系统会发相应的广播;开机时,系统会发开机广播等。应用也可以发广播,例如,一个应用下载完某些数据后,可以发一个广播,通知系统或者其他应用这些数据已经下载完成可以使用了。虽然广播接受者也不提供用户界面,但是他可以在状态栏,以通知的形式来提醒用户一个广播发生了。


  • android系统比较特殊的一面是:一个应用可以调起其他应用中的组件,例如:当你的应用需要拍摄一张图片,并且编辑这张图片时,你可以调用系统拍照的应用中用来拍摄的activity,拍摄完照片,并把照片返给你使用。在整个过程中,你不用自己写一个activity来拍摄照片,也不用写很多代码把你的应用和相机应用连起来。

    系统开启一个组件,会运行它所在的进程,并初始化它需要的类。例如:当你的应用调用相机的应用来拍摄照片,相机的应用并没有在你应用的进程里。

    由于一个应用独立运行在一个进程中,所以他不能直接与其他应用进行通信,当你的应用想调用相机应用时,你需要通过一个Intent,并给它绑定特定的动作,交给系统,系统找到相应的activity并开启。

    Activating Components


    四大组件中的三个组件 — Activity、Service、Broadcast receivers 都可以通过一个叫做Intent的异步消息开启。他需要绑定一个action来触发组件。
    intent 是有 Intent对象产生的,他可以调起一个明确的组件或者一种明确类型的组件,也就是说,intent有显示和隐式之分。

    对于服务和活动,intent可以指明要操作的动作,也可以指明要操作的数据的URI。例如,一个intent可能包含一个请求,使得一个activity去显示一个图片或者打开一个网页。在某些情况下,你可以打开一个activity,让这个activity来返回一些数据,这个activity返回到额数据也包含在一个intent中。

    对于有广播接受者,intent仅仅仅仅定义了要发送的广播。

    内容提供者不能被intent调起,然而,他可以作为ContentResolver(内容解析者)的目标被调用。这样,组件仅仅通过内容解析者,就可以操作内容提供者的一些方法,使得系统更加安全。

    不同的组件,用不同的方法去调起:

    • activity:你可以通过传递一个intent来startActivity() 或者startActivityForResult() (当你希望你开启的activity有返回值得时候调用这个方法开启).
    • service:你可以通过传递一个intent来startService() 或者bindService().
    • broadcastReceiver:你可以通过传递一个intent,来sendBroadcast(), 或者sendOrderedBroadcast(), 或者 sendStickyBroadcast()来发送广播
    • content provider:你可以通过ContentResolver的query()方法执行一个content provider查询操作

    这些东西,在这里只是简单的说明一下,后续的文章里会详细的介绍怎样应用的,所以不用担心哈!
    当然google的介绍还有很多,但是我觉得我们最好开始正题吧:下一章进入详细的讲解!

    0 0