美文网首页程序员
Android开发基础知识

Android开发基础知识

作者: 九叶轻尘 | 来源:发表于2019-03-11 18:48 被阅读8次

    1、沙箱机制

    Android操作系统是一种多用户Linux系统,系统会为每个应用分配一个唯一的Linux用户ID,再为应用中的所有文件设置权限,使得只有拥有这个ID的应用才能访问这些文件。

    每个进程都有自己的VM环境,每个应用都在自己的进程中执行,与其他应用进行隔离。默认情况下,每个应用都只能访问执行其工作所需的组件,而不能访问其他组件。

    可以安排两个应用共享同一个Linux用户ID。在这种情况下,他们能够互相访问彼此的文件。

    2、应用组件

    应用组件是 Android 应用的基本构建基块。每个组件都是一个不同的点,系统可以通过它进入您的应用。 并非所有组件都是用户的实际入口点,有些组件相互依赖,但每个组件都以独立实体形式存在,并发挥特定作用 — 每个组件都是唯一的构建基块,有助于定义应用的总体行为。共有四种不同的应用组件类型。每种类型都服务于不同的目的,并且具有定义组件的创建和销毁方式的不同生命周期。

    • Activity:表示具有用户界面的单一屏幕。最常用的。
    • Service:服务。是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。 服务不提供用户界面。使用场景不多,一般有音乐服务等。
    • ContentProvider:内容提供程序管理一组共享的应用数据。可以将数据存储在文件系统、SQLite 数据库、网络上或应用可以访问的任何其他永久性存储位置。 其他应用可以通过内容提供程序查询数据,甚至修改数据(如果内容提供程序允许)。
    • BroadcastReceiver:广播接收器是一种用于响应系统范围广播通知的组件。

    任何应用都可以启动其他应用的组件(隐式启动)。
    当系统启动某个组件时,会启动该应用的进程(如果尚未运行),并实例化该组件所需的类。
    Android应用没有单一的入口点,比如没有main()函数。

    启动组件

    Activity,Service,BroadcastRecevier通过Intent进行启动,可以将各个组件进行相互绑定,包括其他应用的组件。Intent定义了用于启动特定组件或者特定类型的组件,可以是显示的,也可以是隐式的。

    ContentProvide不会被Intent启动.会在成为 ContentResolver 的请求目标时启动。 内容解析程序通过内容提供程序处理所有直接事务,使得通过提供程序执行事务的组件可以无需执行事务,而是改为在 ContentResolver 对象上调用方法。 这会在内容提供程序与请求信息的组件之间留出一个抽象层(以确保安全)。

    • Activity:可以通过Intent传递到startAcivity()或者startActivityForResult()来启动。
    • Service:可以通过Intent传递到startService或者bindService()来启动或者绑定该服务。
    • BroadcastReceiver:可以将Intent传递到sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast()来发起广播。
    • ContentProvider:调用query()对内容提供程序执行查询。

    3、AndroidManifest.xml文件

    系统启动应用组件之前,必须通过读取应用的AndroidManifest.xml文件确定组件存在(BroadcastReceiver可以在AndroidManifest.xml文件声明,也可以在代码中动态创建并通过调用 registerReceiver() 在系统中注册。)。组件必须在文件中申明,文件必须存在项目的的根目录中。

    声明组件的功能

    通过在AndroidManifest.xml文件中为组件设置一些Intent-filter下的规则,隐式启动时,遍历手机中所有的组件,寻找符合规则的进行启动,如果存在多个结果,则弹出弹框,让用户自己选择。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.zhangchao.test">
    
      <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <!--应用的入口activity-->
        <activity android:name=".MainActivity">
          <!--过滤规则,可以有其他的规则-->
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
          </activity>
        <!--声明一个MyActivity-->
        <activity android:name=".MyActivity"/>
        <!--声明一个MyService-->
        <service android:name=".MyService"/>
        <!--声明一个BroadcastReceiver-->
        <receiver android:name=".MyBroadcastReceiver"/>
        <!--声明一个ContentProvider,authorities是指定的uri,name是Android指定的类-->
        <provider
          android:authorities=""
          android:name=""/>
      </application>
    
      <!--申请获得访问网络的权限-->
      <uses-permission android:name="android.permission.INTERNET"/>
    </manifest>
    

    4、应用资源

    应用资源是指应用中与源代码分离的资源,如图像、音频文件以及任何与应用的视觉呈现有关的内容。在Android项目中的每一项资源,SDK构建工具都会定义一个唯一的整形ID,可以通过ID对资源进行应用。提供与源代码分离的资源的其中一个最重要优点在于,您可以提供针对不同设备配置的备用资源。

    项目res/目录下支持的资源目录

    目录 资源类型
    animator/ 定义属性动画的xml文件
    anim/ 定义渐变动画的XML文件
    color/ 定义颜色状态列表的XML文件
    drawable/ 位图文件(.png、.9.png、.jpg、.gif)
    values/ 包含字符串、整型数和颜色等简单值的 XML 文件。
    mipmap/ 适用于不同启动器图标密度的可绘制对象文件。
    layout/ 用于定义用户界面布局的XML文件
    menu/ 用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。
    raw/ 要以原始形式保存的任意文件,要以原始的InputStream打开这些资源
    xml/ 可以在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处

    values/目录下的资源

    其他 res/ 子目录中的 XML 资源文件是根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。对于此目录中的文件,<resources> 元素的每个子元素均定义一个资源。例如,<string> 元素创建 R.string 资源,<color> 元素创建 R.color 资源。

    目录 资源类型
    arrays.xml 用于资源数组(类型化数组)
    color.xml 颜色值
    dimens.xml 尺寸值
    string.xml 字符串值
    styles.xml 样式

    相关文章

      网友评论

        本文标题:Android开发基础知识

        本文链接:https://www.haomeiwen.com/subject/epxipqtx.html