Activity的简介
一、Activity的基本概念
Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用于显示用户界面,用户通过Activity交互完成相关操作 , 一个App允许有多个Activity。
二、Activity的生命周期
onCreate():
当我们点击activity的时候,系统会调用activity的oncreate()方法,在这个方法中我们会初始化当前布局setContentLayout()方法。
onStart():
onCreate()方法完成后,此时activity进入onStart()方法,当前activity是用户可见状态,但没有焦点,与用户不能交互,一般可在当前方法做一些动画的初始化操作。
onResume():
onStart()方法完成之后,此时activity进入onResume()方法中,当前activity状态属于运行状态 (Running),可与用户进行交互。
onPouse()
当另外一个activity覆盖当前的acitivty时,此时当前activity会进入到onPouse()方法中,当前activity是可见的,但不能与用户交互状态。
onStop()
onPouse()方法完成之后,此时activity进入onStop()方法,此时activity对用户是不可见的,在系统内存紧张的情况下,有可能会被系统进行回收。所以一般在当前方法可做资源回收。
onDestory()
onStop()方法完成之后,此时activity进入到onDestory()方法中,结束当前activity。
onRestart()
onRestart()方法在用户按下home()之后,再次进入到当前activity的时候调用。调用顺序onPouse()->onStop()->onRestart()->onStart()->onResume()。
三、Activity的四种状态
- Running
当前显示在屏幕的activity(位于任务栈的顶部),用户可见状态。 - Poused
依旧在用户可见状态,但是界面焦点已经失去,此Activity无法与用户进行交互。 - Stopped
用户看不到当前界面,也无法与用户进行交互 完全被覆盖。 - Killed
当前界面被销毁,等待这系统被回收。
四、Activity的四种启动模式
- standard
- singleTop
- singleTask
- singleInstance
- standard :每启动一个Activity就会在栈顶创建一个新的实例 。 缺点:当Activity已经位于栈顶时,而再次启动Activity时还需要在创建一个新的实例,不能直接复用。
- singleTask:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例。 缺点:如果Activity并未处于栈顶位置,则可能还会创建多个实例。
- singleTask:使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在 则直接复用,并把当前Activity之上所有实例全部出栈。
- singleInstance:该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该势力在整个系统中只有一个。无论从那个任务栈中 启动该Activity,都会是该Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个Activity实例。
五、Activity的启动
- 显示调用
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
- 隐式调用
Intent intent = new Intent();
intent.setAction("com.dev.other");
intent.addCategory("com.dev.othercat");
startActivity(intent);
<activity android:name=".OtherActivity">
<intent-filter>
<action android:name="com.dev.other"/>
<category android:name="com.dev.othercat"/>
//必须加上,否者报错
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
六、Activity的启动动画
startActivity(new Intent(MainActivity.this,OtherActivity.class);
overridePendingTransition(activity进入时的动画,activity退出时的动画);
动画放在 res/anim 目录下