您的位置:

Android 架构详解

一、概述

Android 系统是由 Google 开发并发布的基于 Linux 内核的开源移动设备操作系统。由于 Android 设备逐渐成为主流智能手机和平板电脑的操作系统,因此它的架构也变得越来越重要。Android 应用程序的架构由四个主要组件组成:应用层,框架层,运行时库,和 Linux 内核。在这篇文章中,我们将逐一介绍每一层的技术和架构,并说明其优缺点。

二、应用层

Android 应用程序通过 Java 编写,运行在 Dalvik 虚拟机 (现在改为 ART 虚拟机) 上。应用层是用户直接接触的界面,它包括 UI 组件与控件,和 用于处理用户不同输入和输出的事件。应用层实现的组件通常包括 Activity,Service 和 BroadcastReceiver。

Activity 提供了一个用户界面,并且可以接收来自其他应用程序的事件。它还可以被其他应用程序调用,并可以启动其他 Activity 和 Service。

Service 是一种后台运行的组件,没有用户界面。它被设计为长时间运行,处理耗时操作,或为其他应用程序提供服务。

BroadcastReceiver 允许应用程序接收广播消息,可能来自系统或其他应用程序。BroadcastReceiver 可以启动 Activity 或 Service,或执行其他操作。

三、框架层

框架层是应用程序和核心库之间的接口。它提供了应用程序框架,包括它们如何与底层资源一起工作。它提供的服务包括内容提供器、视图系统和通信机制。

内容提供器允许应用程序共享数据。它提供了标准接口,以便其他应用程序可以查询和操作这些数据。

视图系统是应用程序的用户界面,它提供了标准的 UI 组件和布局管理器。

通信机制指的是 IPC (Inter-Process Communication)。Android 应用程序通信最终都是通过系统提供的一些 IPC 机制,比如,Binder,Intent,Broadcast 等。

四、运行时库

运行时库包括核心库和 Dalvik(ART)虚拟机。核心库是 Android 上的常见 Java 库,包含了丰富的 Java API 集合。Dalvik(ART)虚拟机充当运行 Java 代码的基础。它有一个专门的字节码格式(DEX),它是处理 Android 平台上的 Java 代码的更高效的方法。

Android 5.0 及更高版本使用 ART 运行库替换 Dalvik。ART 通过先将 Dex 文件转换成本地机器码,使应用程序在运行时更快,并降低了应用程序启动时间。在 ART 下,未使用的部分会被删除掉,虚拟机预热时间被降低了。但是,Dex 格式仍然保留,以兼容先前的 Android 版本。

五、Linux 内核

Linux 内核是 Android OS 的基础。它提供底层的硬件抽象层(HAL),包括硬件驱动程序,メ模块和堆栈。它还提供了安全机制,进程管理和内存管理。

// 下面是一个开发一个简单 Android 应用程序的实例代码:

package com.example.myfirstapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

// 上面代码会启动 DisplayMessageActivity。下面代码是 DisplayMessageActivity:

package com.example.myfirstapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class DisplayMessageActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);

        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(message);
    }
}