Activity和Intent的使用

③ 由前文所述已知,一个应用中会指定一个Activity为”主“Activity,首次启动应用时呈现给用户的那个 Activity,通常称之为入口Activity。该Activity会在AndroidManifest.xml文件中特殊指定。

2、Activity的管理

① 每个 Activity 均可启动另一个 新的Activity,完成特定的业务逻辑。

② Activity从被创建,到被用户可视化看到,再到被系统销毁,会经历一系列的周期函数的调用和状态的变化,因此Activity是有声明周期的。

③ Android系统使用堆栈(返回栈)来存储和管理Activity。遵循基本的”先进后出“的堆栈机制。

④ Activity的声明周期函数包含:onCreate、onStart、onReStart、onResume、onPause、onStop、onDestory七个函数。

3、Activity的创建

① Activity本身是Android的SDK的一个类。

② 如果要自定义一个自己的活动窗口,需要继承自Activity,即创建的自定义Activity必须是系统Activity的子类。

③ 调用setContentView来实现布局文件的设置。

④ 在AndroidManifest.xml文件中进行Activity的声明。

4、启动Activity
Intent intent = new Intent();
intent.setClass(this, ActivityName.class);
startActivity(intent);

可以通过上述最简单的方式启动一个Activity。

5、Activity之间的数据传递

① startActivity启动时携带数据,在新窗口中进行接收。

② startActivityForResult:调用Activity执行结束后,返回调用数据和结果。

二、Intent和Intent过滤器
1、Intent

在Android中,Intent是一个消息传递对象,Intent主要的作用就是实现各个组件的联络和通信功能。比如说:启动一个新的窗口界面,在Activity之间进行数据的传递等。

2、Intent的分类

Intent分为两类:显示Intent和隐式Intent。

  • 显示Intent:通过指定具体的名称或者组件名称给Intent,进行程序执行和处理。比如,启动一个具体的Activity,属于显示Intent。
  • 隐式Intent:没有具体的名字和组件,仅声明要执行哪些操作。
3、IntentFilter过滤器

在使用隐士Intent时,由于没有具体的名字和组件,因此必须由Android系统帮助定位和确定与Intent任务相匹配的组件。Android将Intent的请求内容和一个叫做IntentFilter的过滤器比较,IntentFilter中包含系统中所有可能的待选组件。

  • 在Android开发中,需要在AndroidManifest.xml中声明自己所包含组件的过滤器,用以来表明组件可以匹配哪些Intent请求。
  • 一个没有声明Intent-Filter的组件只能响应指明自己名字的显式Intent请求,而无法响应隐式Intent请求。

Android系统在使用IntentFilter来解析隐式Intent请求时,主要使用三个维度的标准进行筛选和过滤:

  • Action:系统中已经定义了一系列常用的动作,内容为文本字符串。可以在类中,通过setAction()方法或在清单文件AndroidManifest.xml中设置。
  • Data:Data通常是URI格式定义的操作数据。例如:tel:// 。在Java类中,可以通过setData()方法设置。
  • Category:Category属性用于指定当前动作(Action)被执行的环境。在class中可以通过addCategory方法或在清单文件AndroidManifest.xml中设置。默认为:CATEGORY_DEFAULT。
  • Extras:Extras属性主要用于传递目标组件所需要的额外的数据。在class类中通过putExtras()方法设置。
4、常见的ACTION、CATEGORY、DATA等
  • ACTION:
    ACTION_MAIN:Android Application的入口,每个Android应用必须且只能包含 一个此类型的Action声明。  ACTION_VIEW:系统根据不同的Data类型,通过已注册的对应Application显 示数据。 ACTION_EDIT:系统根据不同的Data类型,通过已注册的对应Application编辑示数据。  ACTION_DIAL:打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码。  ACTION_CALL:直接呼叫Data中所带的号码。  ACTION_ANSWER:接听来电。
  • CATEGORY:
    CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。  CATEGORY_HOME:设置该组件为Home Activity。 CATEGORY_PREFERENCE:设置该组件为Preference。  CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。
  • Data:
    tel://:号码数据格式,后跟电话号码。  mailto://:邮件数据格式,后跟邮件收件人地址。 smsto://:短息数据格式,后跟短信接收号码。 content://:内容数据格式,后跟需要读取的内容。  file://:文件数据格式,后跟文件路径。
三、Activity的启动模式

前文已介绍过,一个应用程序通常是由多个Activity组成的,而**任务栈(Task Stack)**则是用来存放和管理当前应用中一个或多个Activity的栈结构,利用栈结构“先进后出”的特点,它可以记录这些Activity启动的先后顺序。

3.1、Android的四种启动模式
1、standard标准模式

标准模式,这也是系统默认的模式,每次启动Activity都会重新创建一个新的实例,不管这个实例是否已经存在,这是一种典型的多例实现。

**应用场景:**适用于app里面的大部分普通页面,打开一个新的页面,就创建一个Activity,由于标准启动模式的是最普通的模式,所以在使用场景这块,主要是看页面交互需求里,哪些不适合标准启动模式,我们要用新的启动模式替换标准启动模式。

2、singleTop栈顶模式

当试图一个Activity启动时,如果发现任务栈的栈顶已经存在该Activity,那么Activity实例不会被重新创建,而是直接复用栈顶的Activity实例。但是当要创建的活动不是在栈顶时,即使栈中已有该活动的实例,仍然会创建新的实例。

**应用场景:**适用于一些文章类的内容呈现页面,为了解决用户页面交互可能需要多次按返回键回到主页的场景(这种场景的发生,往往和系统通知栏打开页面有关,当然还有可能是特定的交互设计,希望快速回到任务栈中的特定页面),我们使用singleTop模式。再比如支付业务的结果页面,为了避免多次回调出现多个支付回调页面,可以设计Activity的启动模式为singleTop。

3、singleTask栈内复用模式

singleTask模式,在这种模式下,每次启动Activity时,先检查任务栈中是否已经存在该Activity的实例,如果已存在,则复用该实例,并且弹出任务栈中该实例前面的所有Activity(即销毁它上面的其它Activity),使其自身位于栈顶。

**应用场景:**如果在应用的整个存活生命周期中,希望当前页面交互的Activity只有一个,我们可以选择使用singleTask启动模式,也就是说:如果希望当前Activity在当前应用内唯一,使用singleTask模式。比如,应用的主界面一般可以设计成singleTask模式,一般主页面的设计都是一个Activity加三四个tab页。又比如注册在应用的主界面,进入登录界面,可以执行注册流程,注册完成后重新回到登录界面进行登录,适合使用singleTask。

4、singleInstance单实例模式

singleInstance模式,这是一种单例模式,整个手机操作系统里面只有一个Activity实例存在,该Activity会运行在自己的任务栈里面,并且该Activity 始终是这个任务栈里唯一的成员。

**应用场景:**希望整个android手机系统全局唯一页面,可以使用此种模式,不是特别常见,会见于系统应用中。

3.2、启用Activity的启动模式
  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android 程序设计中,IntentActivity 是非常常见的两个概念,它们分别用于实现不同的功能。 1. Intent Intent 是用于在 Android 应用程序之间传递数据的一种机制。通过 Intent,我们可以实现 Activity 之间的数据传递、启动系统组件、启动服务等操作。Intent 由两部分组成:Action 和 Data。其中,Action 表示要执行的操作,如打开某个 Activity、发送邮件等;Data 则描述了要操作的数据,如要打开的文件、要发送的邮件地址等。 下面是一个简单的 Intent 示例代码: ```java Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("name", "Tom"); startActivity(intent); ``` 上述代码中,我们创建了一个 Intent 对象,并将要跳转的 Activity 指定为 SecondActivity。同时,我们还通过 putExtra() 方法向目标 Activity 传递了一个名为 "name" 的参数,值为 "Tom"。最后,我们调用 startActivity() 方法启动目标 Activity。 2. Activity ActivityAndroid 应用程序中的一个组件,用于展示用户界面。每个 Activity 都拥有自己的布局和生命周期,并且可以通过 Intent 启动其他 Activity。 下面是一个简单的 Activity 示例代码: ```java public class SecondActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); textView = findViewById(R.id.textView); Intent intent = getIntent(); String name = intent.getStringExtra("name"); textView.setText("Hello, " + name); } } ``` 上述代码中,我们创建了一个名为 SecondActivityActivity,并在 onCreate() 方法中设置了其布局文件为 activity_second.xml。同时,我们还通过 getIntent() 方法获取了传递过来的 Intent 对象,并从中获取了名为 "name" 的参数值。最后,我们将参数值设置到了 TextView 控件中。 以上就是 IntentActivity 的简单使用方法。在实际开发中,它们还有很多高级用法,如启动 Activity 后获取返回值、使用 Intent 进行隐式调用等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值