• android API Guides学习--Introduction(2)


    应用程序基本原理:

    android应用程序是用java语言编写的,android SDK工具在APK(Android package)里编译代码(数据文件和资源文件)。apk是一个后缀为.apk的档案文件,1个apk文件包含了android应用程序的所有内容,apk是用来安装应用程序的基于android的设备。一旦安装了apk文件,每个app运行在自己安全的沙盒中。

    • android操作系统是一个多用户的Linux操作系统,每一个app有一个不同的用户。

    • 系统默认给各自的app分配一个唯一的Linux用户ID,ID只被系统使用,对于app来说,ID是个未知数。系统给所有app文件设置了权限,只有分配了用户ID后,app才可以运行。

    • 每个进程有他们自己的虚拟机,因此app运行时是与其他app隔离的。

    • 所有app运行需要他们自己的Linux进程。当一些app的组件需要被执行时,就运行他们各自的进程。当不再需要组件或需要给他app释放内存时,关闭进程

    用这种方法,每个app实现最小特权原则——默认情况下,每个app只能访问到它的工作所需要的最少的权限。这将创建一个非常安全的环境:每一个应用程序不能访问系统没有给予它权限的任何一个部分。

    但是,还有一些方法可以让app与其他app分享数据,或者使用系统资源。

    • 给两个app共享同一个Linux用户ID是可能的,在这种情况下,他们可以访问彼此的文件。为了节省系统资源,使用同一个用户ID的app可以在同一个Linux进程中运行并分享同一个虚拟机(应用程序也必须使用相同的证书签名)

    • app可以请求权限使用设备数据,比如用户的联系人,短信群发,SD 卡,照相机,蓝牙等等,所有app权限在安装时授予

    前面内容包含了关于app如何存在于系统内部的基础知识,剩下的内容给你介绍

    • 定义app核心框架组件

    • 在app的Manifest文件中声明组件与设备功能。

    • 资源是独立于应用程序代码的,让你的应用程序,以优雅地行为为各种设备优化配置。

    app组件:

    app组件是所有app的基本要素,每一个组件都是系统进入app的不同通过点,对于用户来说,并不是每一个组件都是app真正的入口点,一些组件取决于他们自己。每一个组件都以他们的实体存在,他们各自都有独特的功能,扮演着特殊的角色。每一个都是一个可以帮助确定您的应用程序的整体。

    一共有四种不同类型的组件,每个类型都服务于不同用途,并且有他们独特的如何被创建与销毁的生命周期。

    Activities:

    activity表示一种用户界面的屏幕,例如:一个e-mail app也许会有一个activity显示接收到的新e-mail列表,另一个activity写e-mail,还有一个activity读e-mail。尽管在e-mail app中所有activity一起工作形成有力的用户体验,但是每一个activity对于其他activity来说式独立的。同样的,一个app在另一个app允许后,可以启动另一个app的activity。例如,一个照相机app为了给其他用户分享照片可以启动e-mail app里的activity来写邮件。

    一个activity实现了Activity的子类

    Services:

    service是一个在后台运行的组件,他可以执行长时间运行的操作,或者跨进程执行操作。一个service不会提供用户界面。例如,一个service可以在后台播放音乐直到用户使用另一个不同的app,或者service可以获取数据但并不会阻塞用户和界面交互。另一个组件,例如activity,为了和service互,activity可以启动一个service并让他运行或者将service与activity绑定在一起。

    一个service实现了Service类的子类。

    Content Providers:

    content providers管理一套可分享的app数据,你可以在网络上,或者其他的持久稳固你的app可以存储的位置,通过文件系统创建数据和SQLite数据库。通过Content Providers,其他的app可以查询数据,甚至在Content providers允许的情况下修改数据。例如,android系统提供content provider管理连接信息。在适当的允许下,一个app可以查询content provider的数据(例如ContactsContract.Data)来读取或者写入有关个人说明的信息。

    content providers 在读取或者是写入数据方面是有用的。这些数据对于你的app是私有的,不能分享的 。

    content providers实现了ContentProvider的子类。并且为了使app操作事务,必须实现了标准的API集合。                                    Broadcast receivers:

    broadcast receivers是一个响应全系统广播公告的组件。一些广播是由系统发布的,比如屏幕关闭,电量低,图片被捕获。app也可以发布广播,比如,让其他app知道数据已经被下载在设备上并且其他app可以使用这些有效的数据。尽管broadcast receivers并不显示用户界面,但是他们可以创建一个状态栏通知,当广播事件发生时可以提醒用户。更常见的是,对其他组件来说broadcast receivers仅仅是一个网关,并且broadcast只打算做少量的工作。比如,启动一个service执行这个事件最基本的工作。

    broadcast receivers实现了Broadcast receiver子类,并且每一个广播都提供intent类。

    android系统设计特殊的一方面就是一些app可以启动其他app的组件。例如,如果你想用设备照相机捕获一张照片,也许有另外一个app实现了这个功能,你的app可以直接使用它,而不是你自己开发一个activity去实现捕获照片。你并不需要从照相机app中连接代码,你仅仅需要启动照相机app中的activity捕获照片。当完成后,图片可以返回给app供你使用。对于用户来说,照相机似乎是你app的一部分。

     当系统启动一个组件时,启动一个组件所需要的此app的进程以及实例化一个类。例如,如果你的app启动照相机app中捕获照片的activity,属于照相机app的activity在进程中运行,而不是在你的app进程中运行。因此,和大部分其他系统的app不同,android app并没有唯一的一个入口(例如,没有main()方法)

    由于每个应用程序运行在独立于其它应用程序文件权限的系统中,你的应用程序不能直接从另一个程序激活一个组件,但是android系统可以。因此为了在另一个android系统中激活组件,你通过发送一个信息给系统来指定你的intent启动另一个app,然后系统给你激活一个组件。

    翻译自android 官网API Guide。

  • 相关阅读:
    requestAnimationFrame
    react 面试题
    useState使用和原理
    常用网址记录
    .net 学习官网
    centos nginx 设置开启启动
    Asp.Net Core 发布和部署 Linux + Nginx
    SQL Server 执行计划缓存
    SQL Server之索引解析(二)
    SQL Server之索引解析(一)
  • 原文地址:https://www.cnblogs.com/shangshicc/p/3916248.html
Copyright © 2020-2023  润新知