美文网首页程序员
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