文章目录
一、Android系统架构
https://blog.csdn.net/xzzteach/article/details/140904613
二、Android四大组件
(一)Activity
1.Activity特性
- 一个 Activity 包含了用户能够看到的
界面
,从而于用户进行交互。一个应用程序中可以有零个或者多个Activity。零个 Activity 就表示,这个应用程序不包含与用户交互的界面。 - Android应用中每一个Activity都必须要在
AndroidManifest.xml配置文件中声明注册
,否则系统将不识别也不执行该Activity。 - 只有具备
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
属性才是入口Activity。
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- Activity的页面跳转和关闭
- 跳转
Intent intent = new Intent(context,目标Activity.class)
startActivity(intent)
示例:
public void toSecond(View view) {
Intent intent =new Intent();
intent.setClass(this,SecondActivity.class);
startActivity(intent);
}
- 关闭
finish()
- Activity的生命周期
Android 是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里Activity的集合,这个栈也叫作返回栈。Activity的生命周期由以下几个部分组成:
函数 | 描述 |
---|---|
onCreat() | 一个Activity启动后第一个被调用的函数,常用来在此方法中进行Activity的一些初始化操作。例如创建View,绑定数据,注册监听,加载参数等。 |
onStart() | 当Activity显示在屏幕上时,此方法被调用但此时还无法进行与用户的交互操作。 |
onResume() | 英文词义简历、继续进行 这个方法在onStart()之后调用,也就是在Activity准备好与用户进行交互的时候调用,此时的Activity一定位于Activity栈顶,处于运行状态。 |
onPause() | 这个方法是在系统准备去启动或者恢复另外一个Activity的时候调用,通常在这个方法中执行一些释放资源的方法,以及保存一些关键数据。 |
onStop() | 这个方法是在Activity完全不可见的时候调用的。 |
onDestroy() | 这个方法在Activity销毁之前调用,之后Activity的状态为销毁状态。 |
onRestart() | 当Activity从停止stop状态恢进入start状态时调用状态。 |
实际操作过程中,当打开启动Android应用时,MainActivity
会经过onCreate
-> onStart
-> onResume
三个阶段,此时若按home键或则back按键,MainActivity会经过onPause -> onStop
这两个阶段,再进入此MainActivity时,会再调用onRestart -> onStart -> onResume
三个阶段。
3、Activity 启动模式
启动模式一共有 4 中:standard
、singleTop
、singTask
和 singleInstance
,可以在 AndroidManifest.xml 中通过 标签指定 android:launchMode 属性来选择启动模式。
standard模式
standard 模式是 Activity 的默认启动模式,在不进行显示指定的情况下,所有 Activity 都会自动使用这种启动模式。对于使用 standard 模式启动的 Activity,系统不会在乎这个 Activity 是否已经存在在栈中了。每次启动的时候都会创建一个新的实例。一般用于打开邮件之类的。
- 下图为生成的默认Empty Activity
singleTop模式 (栈顶复用模式)
如果 Activity 指定为 singleTop,在启动 Activity 的时候发现返回栈的栈顶已经是该 Activity 了。则认为可以直接使用它,就不会再创建新的 Activity 实例了。因为不会创建新的 Activity 实例,所以 Activity 的生命周期就没有什么变化了。假设你在当前的Activity中又要启动同类型的Activity,此时建议将此类型Activity的启动模式指定为SingleTop,能够降低Activity的创建,节省内存!
一般用于登录页面,新闻详情页等。
singTask 模式(栈内单例模式)
singleTop 很好的解决了重复创建栈顶 Activity 的问题。如果 Activity 没有处于栈顶的位置,还是可能会创建多个 Activity 实例的。那就需要借助 singleTask 了。当 Activity 的启动模式为 singleTask 的时候,每次启动该 Activity 的时候系统会首先在返回栈中检查是否存在该 Activity 的实例,如果发现已经存在则直接使用该实例。并把这个 Activity 之上的所有 Activity 全部出栈,如果没有就会创建一个新的 Activity 实例。
一般主页面使用,购物页面,付款页面,浏览器主页等
- 下图为uniapp
singleInstance模式(堆内单例模式)
singleInstance 模式的 Activity 会启用一个新的返回栈来管理这个 Activity 。在这种模式下会有一个单独的返回栈来管理这个 Activity,不管是哪个应用程序来访问这个 Activity,都共用的同一个返回栈,也就解决了共享 Activity 实例的问题。
4、Activity 之间相互跳转及通信
Intent(意图)是应用程序种各个组件联系的桥梁,通信的载体,负责应用程序中数据的传递。
- 不带数据跳转
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
此段代码实现从当前Activity,跳转到MainActivity,不带任何参数。
- 带数据或多个数据跳转
//带数据跳转
String data = "是我主活动调用了你";
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("ext", data);
startActivity(intent);
- 带数据跳转,带数据返回
Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
Bundle bundle = new Bundle() ;
bundle.putString(