android-学习篇-基础知识

应用组件

  • Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。
  • BroadcastReceiver 借助广播接收器组件,系统能够在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。由于广播接收器是另一个明确定义的应用入口,因此系统甚至可以向当前未运行的应用传递广播。
  • Service 是一个通用入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。Service 不提供界面。
  • ContentProvider 管理一组共享的应用数据,您可以将这些数据存储在文件系统、SQLite 数据库、网络中或者您的应用可访问的任何其他持久化存储位置。其他应用可通过内容提供程序查询或修改数据(如果内容提供程序允许)。

四种组件类型中,有三种(Activity、Service、BroadcastReceiver)均通过异步消息 Intent 进行启动。Intent 会在运行时对各个组件进行互相绑定。您可以将 Intent 视为从其他组件(无论该组件是属于您的应用还是其他应用)请求操作的信使。

Intent

https://developer.android.google.cn/guide/components/intents-filters.html

注意:如果您使用 Intent 来启动 Service,请使用显式 Intent 来确保应用的安全性。使用隐式 Intent 启动服务存在安全隐患,因为您无法确定哪些服务将响应 Intent,且用户无法看到哪些服务已启动。

清单文件

在 Android 系统启动应用组件之前,系统必须通过读取应用的清单文件 (AndroidManifest.xml) 确认组件存在。您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。

// 声明组件
<activity>
<service>
<receiver>
<provider>

除了声明应用的组件外,清单文件还有许多其他作用,如:

  • 确定应用需要的任何用户权限,如互联网访问权限或对用户联系人的读取权限。
  • 根据应用使用的 API,声明应用所需的最低 API 级别。
  • 声明应用使用或需要的硬件和软件功能,如相机、蓝牙服务或多点触摸屏幕。
  • 声明应用需要链接的 API 库(Android 框架 API 除外),如 Google 地图库。

声明组件功能

        <activity android:name="com.example.project.ComposeEmailActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <data android:type="*/*" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

声明应用要求
Android 设备多种多样,但并非所有设备都提供相同的特性和功能。以防将您的应用安装在缺少应用所需特性的设备上,您必须通过在清单文件中声明设备和软件要求,为该应用支持的设备类型明确定义一个配置文件。其中的大多数声明只是为了提供信息,系统并不会读取它们,但 Google Play 等外部服务会读取它们,以便在用户通过其设备搜索应用时为用户提供过滤功能。

<manifest ... >
    <uses-feature android:name="android.hardware.camera.any"
                  android:required="true" />
    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
    ...
</manifest>

应用资源

Android 应用并非仅包含代码,它还需要与源代码分离的资源,如图像、音频文件以及任何与应用的视觉呈现有关的内容。

应该始终外部化应用资源,如图像和代码中的字符串,有利于单独维护这些资源。此外,还应为特定设备配置提供备用资源,方法是将它们分组到专门命名的资源目录中。

应将各类资源放入项目 res/ 目录的特定子目录中。 如下:

  • animator/:定义属性动画的 XML 文件。
  • anim/:定义补间动画的 XML 文件。(属性动画也可以放在该目录,一般为了区分,首选上面的目录。)
  • color/:定义颜色状态列表的xml文件。
  • drawable/:图片或xml文件
  • mipmap/:适用于不同启动器图标密度的可绘制对象文件。
  • layout/
  • menu/:定义应用菜单的xml文件。
  • raw/:以原始形式保存的文件。但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/目录下
  • values/
  • xml/:可以在运行时通过调用 Resources.getXML() 读取的任意XML文件。
  • font/

提供备用资源
在res/中创建一个以<resources_name>-<config_qualifier>形式命名的新目录。

配置 限定符值 说明
屏幕像素密度 (dpi) ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi、nodpi、tvdpi、anydpi

创建别名资源

应用权限

XML解析方式

  • SAX
  • DOM
  • Pull

NDK(Native Develop Kit)

https://developer.android.google.cn/ndk
原生开发工具包(NDK)是一套工具,允许您为 Android 使用C和C++代码,并提供众多平台库,您可用其管理原生Activity和访问物理设备组件,例如传感器和触摸输入。
借助Android Studio 2.2或更高版本,使用NDK将C和C++代码编译到原生库中,然后使用IDE集成构建系统 Gradle将您的库封装入APK。然后,Java代码可以通过Java原生接口 (JNI) 框架,调用您原生库中的函数。
Android Studio用于编译原生库的默认构建工具是CMake。由于很多现有项目都使用构建工具包,因此Android Studio也支持ndk-build。不过,如果您要创建新的原生库,则应使用 CMake。

使用场景

  • 在平台之间移植其应用。
  • 进一步提升设备性能,以实现低延迟时间,或运行计算密集型应用,如游戏或物理模拟。
  • 重复使用自己或其他开发者的C或C++库。

编译和调试原生代码组件

Android 原生开发工具包 (NDK):这套工具允许您为 Android 使用 C 和 C++ 代码。
CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
LLDB:一种调试程序,Android Studio 使用它来调试原生代码。
安装:Tools > SDK Manager

创建或导入原生项目

工作原理

CPU和架构

使用原生代码时,硬件很重要。NDK提供各种ABI供您选择,可让您确保针对正确的架构和CPU进行编译。

ABI

不同的Android手机使用不同的CPU,进而支持不同的指令集。CPU与指令集的每种组合都有专属的应用二进制界面,即ABI。ABI可以非常精确地定义应用的机器代码在运行时如何与系统交互。您必须为应用要使用的每个CPU架构指定ABI。

参考

开发者指南
API reference

猜你喜欢

转载自blog.csdn.net/u010019244/article/details/106164449