前言
基于最近要准备去面试,特意系统的复习了下Android基础,看到Activity这块时,发现很多都忘了,而且之前也没有系统的学习和写笔记记录,所以,特此写下这篇关于Activity的一些理解,旨在帮助大家更好的理解Activity.
Activity是什么?
Activity
是一个Android应用程序组件(也称为Android四大组件之一),它提供了一个屏幕,用户可以通过该屏幕进行交互以执行某些操作,例如拨打电话,拍照,发送电子邮件或查看地图。每个活动都有一个窗口,用于绘制其用户界面。窗口通常填满屏幕,但可能比屏幕小,并漂浮在其他窗口的顶部.
Android应用程序通常由多个彼此松散绑定的Activity
组成。通常,应用程序中的一个Activity
被指定为“主要”Activity
,该Activity
在首次启动应用程序时呈现给用户。然后,每个Activity
可以启动另一个Activity
以执行不同的操作。每次新Activity
开始时,前一个Activity
都会停止,但系统会将Activity
保留在后台堆栈中
(“后堆栈”)。当一个新的Activity
开始时,它会被推到后面的堆栈上,并引起用户的注意。后栈遵循基本的“ 后进先出
”堆栈机制,因此,当用户完成当前活动并按下"后退按钮"时,它从堆栈弹出(并销毁),之前的活动恢复。(后台堆栈将在后面为大家详细介绍。)
如何创建Activity
要创建Activity,您必须创建Activity
(或其现有子类)的子类。在子类中,您需要实现当Activity在其生命周期的各个状态之间转换时系统调用的回调方法,例如在创建,停止,恢复或销毁活动时。两个最重要的回调方法是:
public class ExampleActivity extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
//您必须实现此方法。系统在创建Activity时调用此方法。在您的实施中,您应该初始化Activity的基本组成部分。最重要的是,您必须在此处调用以定义Activity用户界面的布局。
setContentView();
}
//系统将此方法称为用户离开您的Activity的第一个指示(尽管并不总是意味着Activity正在被销毁)。这通常是您应该提交应该在当前用户会话之外保留的任何更改的地方(因为用户可能不会回来)。
@Override
protected void onPause() {
super.onPause();
//在此处应该提交应该在当前用户会话之外保留的任何更改的地方
}
}
在访问Activity时,必须在manifest中声明此Activity,
<manifest ... >
<application ... >
<activity android:name = “.ExampleActivity” /> ..
. </ application ... > .
.. </ manifest >
你也可以指定Activity的<intent-filter>
过滤器,如下:
<activity android:name = “. ExampleActivity ” android:icon = “@ drawable / app_icon” >
<intent-filter> <action android:name = “android.intent.action.MAIN” />
<category android:name = “ android.intent.category.LAUNCHER“ />
</ intent-filter>
</ activity>
如何启动Activity
您可以通过调用启动另一个Activity,通过startActivity()
方法,并将Intent
传递给您要启动的Activity。intent
指定要启动的确切Activity或描述您要执行的操作类型(系统为您选择适当的活动,甚至可以来自不同的应用程序)。Intent
(意图)还可以携带少量数据以供启动的活动使用。
- 启动指定自建的Activity
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);
此种启动又叫做显示Intent .
- 启动其他类型的Activity
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);
此种启动又叫做隐式Intent .
有时候,我们可能需要从上一个Activity接收返回数据结果,这时,我们就需要另外一种启动方式了.
在这种情况下,通过调用startActivityForResult()(而不是startActivity())来启动Activity。然后,要从后续Activity接收结果,就需要实现onActivityResult()回调方法。完成后续Activity后,它会在您的onActivityResult() 方法中返回结果。
private void pickContact()