第一行代码 读笔② (Activity Intent)

先从看得见的入手,探究活动

第二章:什么是活动,活动基本用法,Intent,活动生命周期,活动启动模式,活动的实践。
这些内容上,在学习过程中,并没有发现太大的变化。

什么是活动:活动(Activity)是最容易吸引用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互,一个应用程序可以包含零个或者多个活动。
自己的看法:Activity是一个可以让屏幕提供用户交互动作的组件。

活动的基本用法
在一个应用程序中,可以由多个Activity组成。其中,有一个特殊的Activity,那就是“main”Activity,代表了应用程序启动,看到的首个界面(PS:第一个启动的Activity其实在于AndroidManifest.xml的声明,并不由其mainActivity名字决定)。

  • 创建一个Activity
    为了创建一个Activity,我们必须要继承Activity的子类。同时我们也要至少重载两个方法onCreate(),onPause()。
    onCreate():在你的activity创建的时候就调用,可以在其中初始化一些常量、资源的连接,其中最重要的是setContentView()方法去加载活动界面的布局。
    onPause():当活动交互暂停时,一些在界面上填过的交互数据可以在这里保存,以免造成丢失。
  • Activity的注册
      定义和继承Activity之后,我们还需要进行注册,表示声明。在AndroidManifest.xml内,对我们的Activity进行注册。按书上内容注册即可。
    如果不注册,在Activity在运行时候,会报ANR错误,就是应用程序没有响应。
    可以没有声明任何一个活动作为主活动,仍然是可以正常安装的,只是无法在启动中看到或者打开这个程序。这种没有主活动的应用程序,基本都是用为第三方服务居多,比如支付宝快捷支付服务。

活动生命周期
Activity返回栈:多个Activity定义在一个任务(Task)中,Activity又被安排在back stack,按照后进先出的规则进出栈的。
当通过Back()或者调用finish(),将销毁一个活动,栈顶活动出栈。而入栈将处于栈顶。从而管理活动。

生命周期:

  • 运行状态:处于栈的状态,系统最不愿意回收。
  • 暂停状态:当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。处于存活状态,一般回收。
  • 停止状态:当一个活动不再处于栈顶位置,并且完全不可见。系统仍然会为这种活动保存相应的状态和成员变量,但可能被回收。
  • 销毁状态:当一个活动从返回栈中移除后就变成了销毁状态。系统会倾向于回收处于这种状态的活动。

活动的生存期:
7个方法:
onCreate():每个活动中我们都会重写这个方法,它会在活动第一次被创建的时候调用,比如完成一些初始化操作,加载布局、绑定事件等

  • onStart():活动不可见变为可见的时候调用

  • onResume():活动准备好和用户进行交互的时候调用,此时的活动一定位于返回栈的栈顶、并且处于运行状态。

  • onPause():在系统准备去启动或者恢复另一个活动的时候调用。通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

  • onStop():在活动完全不可见的时候调用。和onPause()方法主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法不会执行。

  • onDestroy():活动被销毁之前调用,之后活动的状态将变为销毁状态。

  • onRestart():活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
    这里写图片描述

3种生存期:

  • 完整生存期:活动在onCreate()和onDestroy()方法之间所经历的
  • 可见生存期:活动在onStart()和onStop()方法之间所经历的
  • 交互活动期:活动在onResume()和onPause()方法之间所经历的
    这里写图片描述

活动被回收,保存活动的临时数据
onSaveInstance()回调方法,保证在活动被回收之前调用。其携带有一个Bundle类型参数,bundle提供一系列方法保存数据。
onCreate(Bundle saveInstanceState),将保存有数据的Bundle参数传入,便可以在相应活动中,利用Bundle取出数据,在执行恢复操作即可。

活动的启动模式:

  • standard :活动默认的启动模式,在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。可重复创立相同的Activity
    这里写图片描述

  • singleTop:当返回栈的栈顶是该活动,可直接使用,不会再创建新的活动
    这里写图片描述

  • singleTask:当返回栈内存在该活动,可直接使用,不会再创建新的活动
    这里写图片描述

  • singleInstance:启用一个新的返回栈来管理这个活动。用于与其他程序共享这个活动的实例。
    这里写图片描述

活动的实践:
随时随地退出程序:建立了一个类,对活动进行管理。记录栈内的Activity,并建立一个finishall的方法,销毁所有活动。
启动活动的最佳写法:建立一个继承于Activity类的子类,其中包含输出当前类信息的intent,在启动活动过程中,传递信息。其他Activity继承于它即可。

Intent:(详细解析Intent
Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。
因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。

  • 动作(Action):Intent要完成的动作,是一个字符串常量。SDK中有准的Action常量规定。

  • 数据(Data):执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。(如打开指定网页,对下一个启动的应用传入相应网址,将Uri对象传递)

  • 分类(Category:一个执行动作Action的附加信息。(PS:一个Intent只可以有一个action,但可以有多个category,并且相响应的Activity中的Category必须全部对应)

  • 类型(Type):显式指定Intent的数据类型。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

  • 组件(Compent):指定Intent的的目标组件的类名称。一般Android会自动查找,但是如果指定直接使用它指定的组件。(属于直接Inten)

  • 扩展信(Extra):扩展信息。传递一定信息。

Intent类型分为显式Intent(直接类型)、隐式Intent(间接类型)。
隐式Intnet:指定一系列更为的action和category等信息,然后交由系统去分析这个Intent,并找出合适的活动去启动。
通过对于一系列属性的筛选,选择出想要应用的Activity。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android中,可以通过Intent向另一个Activity传递参数。以下是一个示例代码: // 假设您已经有了一个主Activity,在它上面放置一个按钮并为该按钮添加一个onClick监听器。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 创建一个Intent对象,用于从MainActivity跳转到SecondActivityIntent intent = new Intent(MainActivity.this, SecondActivity.class); // 将参数放入Intent中,以键值对的形式存储。 intent.putExtra("name", "John"); intent.putExtra("age", 25); // 启动SecondActivity。 startActivity(intent); } }); } } // 接下来,创建一个SecondActivity来处理Intent中的参数。 public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 从Intent中提取参数。 String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0); // 使用参数。 TextView textView = findViewById(R.id.textView); textView.setText("My name is " + name + " and I am " + age + " years old."); } } 上面的代码示例传递了两个参数(name和age),并在第二个Activity中提取和使用了这些参数。在您的应用程序中,您可以根据需要传递不同类型的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值