基础知识
更新: 6/23/2026 字数: 0 字 时长: 0 分钟
生态与基本架构
Android是由Google基于Linux内核创建的系统,分为四大部分:
- Linux Kernel/Linux内核层
- Libraries/核心类库层
- Application Framework/应用框架层
- Application/应用层
Android运行时算在核心类库层中,Android系统中存在一个Dalvik虚拟机实例,Dalvik虚拟机让每一个Android应用都运行在独立的进程中,Dalvik虚拟机(JVM)是Google专门为Android定制的,对于移动端(手机平板)做了大量优化,与其他JVM不同的是,Dalvik虚拟机是基于寄存器进行设计的,其生成的字节码也是特殊的.dex文件
布局
Android SDK中提供了多种布局,常见的是LinearLayout/线性布局,RelativeLayout/相对布局,FrameLayout/帧布局,TableLayout/表格布局,GridLayout/网格布局,ConstraintLayout/约束布局和AbsoluteLayout/绝对布局

LinearLayout
线性布局分为horizontal/水平和vertical/竖直两种,通过android:orientation属性添加
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>RelativeLayout
相对布局是基于父组件和子组件来对位置进行定位


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main"
tools:context=".MainActivity">
<TextView android:id="@+id/c"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="中"
android:textSize="60sp"
android:textStyle="bold" />
<TextView android:id="@+id/n"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/c"
android:layout_centerInParent="true"
android:text="北"
android:textSize="60sp"
android:textStyle="bold" />
<TextView android:id="@+id/s"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/c"
android:layout_centerInParent="true"
android:text="南"
android:textSize="60sp"
android:textStyle="bold" />
</RelativeLayout>FrameLayout
帧布局是在页面上开辟一块空间,会默认在左上方放置组件,越后的组件放置在越上方,常用属性:
- android:foreground:设置帧布局中最前的图像
- android:foregroundGravity:该图像在帧布局中的位置
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main"
android:foreground="@mipmap/ic_launcher"
android:foregroundGravity="left|top"
tools:context=".MainActivity">
<TextView android:layout_width="200dp"
android:layout_height="200dp"
android:background="#FF6143" />
<TextView android:layout_width="150dp"
android:layout_height="150dp"
android:background="#7BFE00" />
<TextView android:layout_width="100dp"
android:layout_height="100dp"
android:background="#FFFF00" />
</FrameLayout>TableLayout

常用属性:
- android:collapseColumns:隐藏哪几列
- android:shrinkColumns:被收缩的列
- android:stretchColumns:被拉长的列
- android:layout_column:该控件是第几列
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:collapseColumns="0,2"
android:shrinkColumns="3"
android:stretchColumns="1"
tools:context=".MainActivity">
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="one" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="two" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="three" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="four" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="five" />
</TableRow>
<TableRow>
<Button
android:layout_column="3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="one" />
</TableRow>
</TableLayout>GridLayout
网格布局是对TableLayout的优化,在GridLayout中不用再写TableRow了

控件
TextView
TextView用于在程序中显示文字

<TextView
android:id="@+id/txtOne"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#000000"
android:gravity="center"
android:text="TextView 示例(显示框)"
android:textColor="#EA5246"
android:textSize="18sp"
android:textStyle="bold|italic" />EditText

<EditText
android:id="@+id/pwdText"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:ems="10"
android:gravity="center_vertical"
android:hint="请输入登录密码"
android:inputType="textPassword"
android:selectAllOnFocus="true"
android:textColorHint="#FF999999"
android:textSize="27sp" />Activity
Android四大组件是Activity,Service,BroadcastReceiver和ContentProvider
其中Activity负责屏幕中向用户展示的页面,Service负责应用在后台执行的业务,BroadcastReceiver负责向其他应用和系统传递消息,ContentProvider负责在不同的程序之间共享业务
Activity的生命周期分为四个阶段
- 运行状态:此时Activity处于屏幕最前端并且获取到了焦点
- 暂停阶段:此时Activity处于可见状态,但是失去焦点,比如被一个系统级弹窗覆盖的情况
- 停止阶段:此时Activity处于不可见状态,由于不可见进而也没有交点
- 销毁状态:可以由停止状态和暂停状态撞边而来,系统将Activity删除,一般有两种方式,一种是通知Activity停止自身,另一种是直接将其进程删除

接着我们来介绍Activity的几个生命周期相关方法
- onCreate:当Activity被创建时调用
- onResume:当Activity开始获取到焦点之初执行,因此会可能在onStop,和OnPause函数之后出现
- OnPause:当Activity失去焦点就出现
- onStop:当Activity不可见出现,由于不可见前一定失去焦点,所以往往在OnPause之后
- OnRestart:只有stop后才需要restart,restart会回到create
- onDestory:Activity销毁时执行
最初的MainActivity就是继承的AppCompatActivity,这里面有上面的这些方法
启动Activity
我们可以使用startActivityForResult开启一个Activity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, MY_REQUEST_CODE);上面的代码中,我们要先创建一个Intent,Intent传入两个参数,一个是唤起新Activity的Activity实例,另一个是要创建的Activity的类文件
使用的startActivityForResult传入两个参数,一个是Intent,一个是requestCode,requestCode的意义是给新启动的Activity命名,后续可以使用它对新启动的Activity销毁
finishActivity(MY_REQUEST_CODE);Intent
这里提到的Intent就是不同组件之间通信的载体,Intent可以启动Activity,Service,BroadcastReceiver
Action和Category是Intent的两个属性,Action用于声明具体要执行的动作,category用于声明该组件适用的环境/附加配置(如:是否是主入口、是否支持默认启动)
| Action 常量名 | 对应字符串全称 | 核心作用描述 | 考试高频死磕点 |
|---|---|---|---|
ACTION_MAIN | android.intent.action.MAIN | 应用程序启动的主入口。 | 必须与 CATEGORY_LAUNCHER 绑定出现,用于在桌面生成图标。 |
ACTION_VIEW | android.intent.action.VIEW | 通用展示动作,系统根据数据类型自动用最合适的App打开。 | 经典考题:打开网页。Uri.parse("https://...") |
ACTION_DIAL | android.intent.action.DIAL | 填充号码并跳转到拨号盘,不直接拨出。 | 安全,不需要任何权限。常与 tel:10086 数据配合。 |
ACTION_CALL | android.intent.action.CALL | 直接拨打电话,不经过拨号盘。 | 危险,必须申请 CALL_PHONE 权限,否则报错崩溃! |
ACTION_PICK | android.intent.action.PICK | 从其他组件或应用中挑选一项数据并带回。 | 常用于打开相册选照片、打开通讯录选联系人。 |
| Category 常量名 | 对应字符串全称 | 核心作用描述 | 考试高频死磕点 |
|---|---|---|---|
CATEGORY_DEFAULT | android.intent.category.DEFAULT | 默认的类别属性。 | 隐式跳转的“强行通行证”。XML中不加这一行,隐式 Intent 必崩溃。 |
CATEGORY_LAUNCHER | android.intent.category.LAUNCHER | 让 Activity 显示在系统的桌面应用列表中。 | 选择题常考:决定 App 哪个界面是第一个启动的。 |
CATEGORY_BROWSABLE | android.intent.category.BROWSABLE | 声明该 Activity 可以被浏览器安全调用。 | 考点:网页如何直接唤醒并跳转到本地 App 界面。 |
CATEGORY_HOME | android.intent.category.HOME | 将该 Activity 声明为系统桌面(主屏幕)。 | 按下手机 Home 键时,会让用户选择是否用它 |
Fragment
Fargment是Activity中的一部分,一个Activity可以由多个Fragment组成,由于Fragment是Activity的一部分,所以其生命周期与Activity同步

Fragment准备阶段:
onAttach()(挂载):Fragment 刚被扔进 Activity 肚子里,两者建立了血缘关系,此时可以通过参数拿到宿主 Activity 的对象引用。onCreate()(创建):系统开始创建 Fragment 实例。此时还没有加载任何 UI 界面,只能用来初始化一些纯代码的数据或变量。onCreateView():真正开始加载 Fragment 自己的 XML 布局文件**,在这个方法里,你必须调用inflater.inflate(R.layout.xxx, ...)来把布局实例化,并将创建好的View对象返回给系统。onActivityCreated()(宿主就绪):告诉 Fragment:“你依附的那个 Activity 已经把它的onCreate()执行完了,彻底准备好了。”,只有在这个方法执行后,你才能放心地在 Fragment 里通过getActivity().findViewById()去抓取父页面的控件。
Fragment Activity生命周期同步**阶段:
onStart()(可见):Fragment 的界面在屏幕上露脸了,但用户还戳不动它。onResume()(交互):Fragment 拿到焦点,变成大前台,用户可以和它疯狂互动。onPause()(暂停):界面可见但失去焦点(比如弹出了一个半透明的系统提示框)。onStop()(停止):界面完全被别人挡住,进入后台。
Fragment死亡阶段:
onDestroyView()(清理界面):Fragment 的 UI 界面(View)被销毁并移除了,此时 Fragment 的 Java 对象还没销毁,只是界面没了。如果用了 ViewBinding 或者大内存的 UI 资源,必须在这里置为null释放内存。onDestroy()(彻底销毁):整个 Fragment 对象彻底宣告死亡,onDetach()(解绑断绝关系),最后一缕联系被切断,Fragment 和 Activity 彻底说再见。