安卓复习
第一章 Android简介
安卓体系结构
Android是基于Linux内核的软件平台和操作系统,采用了软件堆层的架构,共分为4层。第一层是Linux内核,提供有操作系统内核管理的底层基础功能。第二层是中间件层,由函数库和Android运行时构成。第三层是应用程序框架层,提供了Android平台基本的管理功能和组件重用机制,第四层是应用程序层,提供一系列核心应用程序。
第二章 Android开发环境
目录结构
- platforms :框架
- platforms-tools:编译
- samples:示例代码和程序
Android调试桥(定义)*
Android调试桥(ADB)是用于连接Android设备或模拟器的工具,负责将应用程序安装到模拟器和设备中,或从模拟器或设备中传输文件。Android调试桥是一个客户端/服务器程序,包含守护程序、服务器程序和客户端程序。守护程序运行在每个模拟器的后台;服务器程序运行在开发环境中,管理客户端和守护程序的连接;客户端程序通过服务器程序,与模拟器中的守护程序相连接。
第三章 第一个Android程序
Android程序结构
-
activity元素 :是对Activity子类的声明,不在
别的要记得,难的有三个
- AndroidManifest.xml 文件中,根元素是 manifast ,包含 xmlns:android、package、android : versionCode 和 android: versionName 4个属性。
- manifest元素仅能包含一个application元素,application元素中能够声明(生命了每一个应用程序的组件及其属性)Android程序中最重要的4个组成部分,包括Activity、Service、BroadcastReceiver和ContertProvider,所定义的属性将影响所有组成部分。
- activity元素 :是堆Activity子类的声明,不在AndroidManifest.xml文件中声明的Activity将不能在用户界面中显示。
- intent-filter中声明两个子元素action和category。
三个目录,三个文件
目录:src(源代码)、res(资源目录)、bin(编译过程中产生的文件,最终产生的apk文件)
三个文件:MainActivity.java (源代码), activity_main.xml(布局文件) , AndroidManifast.xml(程序声明文件)
资源引用
资源的引用一般有两种方法,一种方法是在代码中引用资源,另一种方法则是在资源中引用资源。(一般来说,我们在使用资源时,大多都是在代码中由id来访问资源)
第四章 Android生命周期
程序生命周期(进程怎么变换,有哪些)
Android组件
-
Activity 是Android程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件。Android应用程序可以包含一个或多个Activity,一般需要指定一个程序启动时显示的Activity。
-
Service一般用于没有用户界面,但需要长时间在后台运行的应用。可以公开Service的程序接口,供其他进程调用。
-
BroadcastReceiver 用来接收广播消息的组件,不包括任何用户界面。可以启动Activity或者Notification通知用户接收到重要消息(Notification能够通过多种方式提示用户,包括闪动背景灯,震动设备,发出声音或在状态栏上放置一个图标) 有两种注册方法,静态在xml文件中注册,动态在代码中注册
-
ContentProvider :是Android系统提供的一种标准的共享数据的机制,其他程序通过ContentProvider访问程序的私有数据。Android系统内部提供一些内置的ContentProvider,能够为应用程序提供重要的数据信息(联系人信息、通话记录)
-
四大组件的共性: 组件都是程序入口、都需要在AndroidManifest.xml中声明,因为都是系统调用(唯一共性:注册)
Android系统的进程优先级
从高到低分别为:
- 前台进程(高)
- 可见进程(中)
- 服务进程(中)
- 后台进程(低)
- 空进程 (低)
Activity生命周期*
activity的生命周期指的是Activity从启动到销毁的过程
activity表现为四种状态:
-
活动状态:activity在最上层,能够杯用户看到,并且能进行交互
-
暂停状态:在界面上被部分遮挡,不能与用户进行交互
-
停止状态:完全不能被用户看到,被其他的activity遮挡,不可交互
-
非活动状态:不在上面三种就在这种状态下。上面三种为主要状态
activity栈
遵循先进先出规则,暂停或停止状态的activity位于底层就会被终止并释放资源转为非活动状态。
Activity的主要事件回调函数
随着activity自身状态的变化,Android系统会调用不同的事件回调函数。
主要事件回调函数有:
函数 | 是否可终止 | 说明 |
---|---|---|
onCreate() | 否 | 启动后第一个调用的函数,用来进行activity的初始化(创建View、绑定数据) |
onStart() | 否 | 当Activity显示在屏幕上时,该函数被调用 |
onRestart() | 否 | 当Activity从停止状态下进入活动状态前,调用该函数 |
onResume() | 否 | 当Activity可以接收用户输入时,该函数被调用,此时Activity位于Activity栈的栈顶。 |
onPause() | 否 | 当Activity进入暂停状态时,该函数被调用。用于保存数据,关闭动画,释放cpu资源。该函数必须简短,因为另一个Activity必须等该函数执行完毕后才能在界面显示 |
onStop() | 是 | 当Activity不对用户可见后,该函数被调用,Activity进入停止状态 |
onDestroy() | 是 | 在Activity被终止前,也就是进入了非活动状态前,该函数被调用有两种情况下该函数会被调用:1.当程序调用finish()函数 2.程序被android系统中介。 |
android程序的特点
- 填空式的程序设计
- 生命周期函数和事件处理函数
Activity事件回调函数的调用顺序*
第五章 Android用户界面
Android用户界面的特点:
1.View Tree
2.单线程用户界面
主线程调用回调函数不会被打断,并且不会资源缺失。(缺点就是不能做耗时,因为是单线程要是主线程上做耗时的操作便会堵塞整个线程)
MVC模型(重!!!)
Android用户界面框架采用的是MVC(Model-View-Controller)模型。为用户提供了用于处理用户输入的控制器(Controller);显示图像的视图(View);模型(Model)是应用程序的核心,用于保存数据和代码。
视图树(View Tree)模型 (重!!)
Android用户界面框架采用的是视图树模型,以下是相关概念|
- 视图树由View和ViewGroup构成
- View是最基本的可视单位,所有在界面上可见元素都是View的子类。
- ViewGroup是一种能够承载多个View的显示单元
- Android系统会依据视图树的结构从上至下绘制每一个界面元素,每个元素负责对自身的绘制,如果包含有子元素,父元素会停止绘制子元素区域,通知子元素绘制,以提高屏幕绘制的效率,缩短绘制时间。
单线程用户界面
- 控制器从队列中获取事件和视图在屏幕上绘制用户界面,使用的都是同一个线程。
- 特点:处理函数具有顺序性,能够降低应用程序的复杂度,同时也能降低开发的难度。
- 缺点:如果事件处理函数过于负责,可能会导致用户界面失去响应。
界面控件
TextView和EditText
EditText继承于TextView
Button 和ImageButton
这两个控件无继承关系
ListView
List → \rightarrow → Adapter → \rightarrow → adapterView → \rightarrow → (getView()) Adapter
ListView 是一个垂直显示的列表控件,如果内容过多就会出血垂直滚动条,ListView能够通过适配器将数据和自身绑定,显示内容;还支持点击事件;
常用的7种界面布局
- 线性布局(LinearLayout):根据不同的排列,每行(列)仅包含一个界面元素
- 框架布局(FrameLayout):如果有多个子元素,后放置的子元素将遮挡先放置的子元素。
- 表格布局(TableLayout):网格的边界对用户不可见,网格布局支持嵌套(可以在其中添加其他界面布局)。
- 相对布局(RelativeLayout):能够最大程度保证在各种屏幕尺寸的手机上正确显示界面布局。
- 绝对布局(AbsoluteLayout):必须要指定坐标。不推荐,不能适应变化。
- 网格布局(GridLayout):将界面划分成多个块,这些块是根据界面元素动态划分的。
- 约束布局(ConstraintLayout):约束,就是要定义控件在某方面与其他控件的对其或者距离关系。
菜单
- 应用程序种非常终于的组成部分
- 在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面
- 为程序开发人员提供了易于使用的编程接口
Android支持三种菜单:
- 选项菜单
- 子菜单
- 快捷菜单
Fragment*
Fragment具有与Activity类似的生命周期,但比Activity支持更多的时间回调函数。
通常情况下,创建Fragment需要继承Fragment的基类,并至少实现**onCreate()、onCreateView()、和onPause()**三个生命周期的回调函数。
- onCreate():是在Fragment创建时被调用,用来初始化Fragment种的必要组件;
- onCreateView():是Fragment在用户界面上第一次绘制时被调用,并返回Fragment的根布局视图;
- onPause():是在用户离开Fragment时被调用,用来存Fragment中用户输入或修改的内容;
使用方法: 静态、动态
按键事件
- 如果界面控件设置了事件监听器,则事件将先传递给事件监听器。
- 相反,如果界面控件没有设置事件监听器,界面事件则会直接传递给界面控件的其他事件处理函数。
第六章 组件通信与广播消息
组件都是程序的入口
Intent
Intent是一种轻量级的消息传递机制,可以在同一个应用程序内部的不同组件之间传递信息,也可以在不同应用程序的组件之间传递信息,还可以作为广布事件发布Android系统消息。(可以进程内也可以进程外)
Intent支持显示或隐式启动组件,显示启动需要指明需要加载组件的类,隐式启动则无需指明具体的类,只要提供需要处理的数据或动作即可。
Intent的用途
- 启动Activity和Service
- 在Android系统上发布广播消息
启动Activity
显示启动
- 使用Intent显示启动Activity
- 创建一个Intent
- 指定当前的应用程序上下文以及要启动的Activity
- 把创建好的Intent作为参数传递给startActivity()方法
MainActivity.java
package com.example.myapplication;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.Bt_login);
tv= findViewById(R.id.Edit_n);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intt = new Intent(MainActivity.this,MainActivity2.class);
startActivityForResult(intt,0);
//startActivityForResult(intt,0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0){
tv.setText(data.getStringExtra("name"));
}
}
}
MainActivity2.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Button bt = findViewById(R.id.Btn_return);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText et = findViewById(R.id.Edit_Name);
Intent result = new Intent();
result.putExtra("name",et.getText().toString());
setResult(0,result);
finish();
}
});
}
}
Intent过滤器
Intent过滤器是一种根据Intent中的动作(action)、类别(category)和数据(data)等内容,对适合接收Intent的组件进行匹配和筛选的机制。
第七章 后台服务
Service 生命周期*
使用线程
- 使用线程的两个基本原则:
- 不能堵塞主进程
- 不能在公共线程中使用jar包(不要在UI线程之外访问Android UI 工具包)