一课一得--Activity

安卓的Activity是Android应用开发中的一个重要组件,它代表了用户界面的一个单独屏幕或窗口。每个Activity都拥有一个用户界面,并且可以与用户交互,例如响应用户的输入、展示信息等。一个应用通常由多个Activity组成,它们通过相互之间的跳转和交互来完成应用的功能。

Activity 的启动和结束

从当前页面跳到新页面,跳转代码如下:
startActivity(new Intent(源页面.this, 目标页面.class));
从当前页面回到上一个页面,相当于关闭当前页面,返回代码如下:
finish(); // 结束当前的活动页面

Activity 的生命周期

onCreate:创建活动。把页面布局加载进内存,进入了初始状态。

onStart:开始活动。把活动页面显示在屏幕上,进入了就绪状态。

onResume:恢复活动。活动页面进入活跃状态,能够与用户正常交互,例如允许响应用户的点击动作、允许用户输入文字等等。

onPause:暂停活动。页面进入暂停状态,无法与用户正常交互。

onStop:停止活动。页面将不在屏幕上显示。

onDestroy:销毁活动。回收活动占用的系统资源,把页面从内存中清除。

onRestart:重启活动。重新加载内存中的页面数据。

onNewIntent:重用已有的活动实例。

把以下代码加入你的Activity类,


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        System.out.println("onCreate"}

     @Override
     protected void onStart(){
        super.onStart();
        System.out.println("onStart");
    }

    @Override
    protected void onResume(){
 super.onResume();

        System.out.println("onResume");
    }

    @Override
    protected void onPause(){
        super();

        System.out.println("Pause");
    }

    @Override
    protected void onStop {
        super.onStop();

 System.out.println("onStop");
    }

    @Override
    protected void onDestroy(){
 super.onDestroy();

        System.out.println("onDestroy"}

    @Override
 protected void onRestart(){
        super.onRestart();

        System.out.println("onRestart");
    }

    @Override
    protected void onNewIntent(Intent intent) {
 super.onNewIntent(intent);

        System.out.println("onNewIntent");
    }
}

各状态之间的切换过程

打开新页面的方法调用顺序为:

onCreate→onStart→onResume

关闭旧页面的方法调用顺序为:

onPause→onStop→onDestroy

显式Intent和隐式Intent

Intent是各个组件之间信息沟通的桥梁,它用于Android各组件之间的通信,主要完成下列工作:

  1. 标明本次通信请求从哪里来、到哪里去、要怎么走。
  1. 发起方携带本次通信需要的数据内容,接收方从收到的意图中解析数据。
  1. 发起方若想判断接收方的处理结果,意图就要负责让接收方传回应答的数据内容。

显式Intent

显式Intent,直接指定来源活动与目标活动,属于精确匹配。它有三种构建方式:

在Intent的构造函数中指定。

调用意图对象的setClass方法指定。

调用意图对象的setComponent方法指定。

//下面是三种构建显式Intent的示例代码:

//1. 在Intent的构造函数中指定:
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
startActivity(intent);


//2. 调用意图对象的setClass方法指定:
Intent intent = new Intent();
intent.setClass(MainActivity.this, TargetActivity.class);
startActivity(intent);


//3. 调用图对象的setComponent方法指定:
Intent intent = new Intent();
intent.setComponent(new ComponentName(MainActivity.this,"com.example.app.TargetActivity"));
startActivity(intent);


其中,MainActivity.this是指当前活动的上下,TargetActivity是指跳转目标的活动类名,"com.example.app.TargetActivity"是跳转目标的完整名路径和类名。

代码示例适用于在当前活动中启动其他目标活动。显式Intent,我们可以确指定来源活动与目标活动。

隐式Intent

隐式Intent,没有明确指定要跳转的目标活动,只给出一个动作字符串让系统自动匹配,

向下一个Activity发送数据

Intent使用Bundle对象存放待传递的数据信息。

Bundle对象操作各类型数据的读写方法说明见下表。

Bundle

在代码中发送消息包裹,调用意图对象的putExtras方法,即可存入消息包裹。

在代码中接收消息包裹,调用意图对象的getExtras方法,即可取出消息包裹。

// 在当前Activity中创建一个Intent对象
Intent intent = new Intent(CurrentActivity.this, NewActivity.class);

 创建一个Bundle对象,并存需要传递的数据
Bundle bundle = new Bundle();
bundle.putString("key", "value"); // 在bundle中存入,使用键值对的形式

// 将Bundle对象入Intent中
intentExtras(bundle);

// 启动目标Activity
startActivity(intent```

接收消息包裹代码:

```java
// 在目标Activity中传递的Intent对象
Intent intent = getIntent();

// 通过getExtras()方法获取传递的Bundle对象
Bundle bundle intent.getExtras();

// 判断Bundle是否为空
if (bundle != null) {
    // 取出数据
    String value = bundle.getString("key");
    // 处理数据
}

向上一个Activity返回数据

处理下一个页面的应答数据,详细步骤说明如下:

上一个页面打包好请求数据,调用startActivityForResult方法执行跳转动作

下一个页面接收并解析请求数据,进行相应处理

下一个页面在返回上一个页面时,打包应答数据并调用setResult方法返回数据包裹

上一个页面重写方法onActivityResult,解析获得下一个页面的返回数据

以下是示例代码:



**在上一个页面中发送请求数据并接收下一个页面返回的数据:**

```java
// 在上一个页面中发送请求数据并接收返回数据
private static final int REQUEST_CODE = 1;  // 自定义请求码

// 在上一个页面中启动下一个页面
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
startActivityForResult(intent, REQUEST_CODE);

// 重写onActivityResult方法,接收返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // 获取返回的数据包裹
            Bundle bundle = data.getExtras();
            if (bundle != null) {
                // 解析数据
                String result = bundle.getString("key");
                // 处理数据
            }
        } else (resultCode == RESULT_CANCELED) {
            // 用户取消了操作
        }
    }
}
```

**在下一个页面收上一个页面发送的请求数据并返回应答数据:**

```java
// 在下一个页面中接收上一个页面发送的请求数据
Intent intent = getIntent();
if ( != null) {
    //请求数据
    Bundle requestBundle = intent.getExtras();
    if (requestBundle != null) {
        // 解析数据
        String requestData = requestBundle.getString("key");
        // 处理请求数据
    }
}

// 创建一个Bundle对象,存入返回的应数据
Bundle responseBundle = new Bundle();
responseBundle.putString("key", "value"); // 存入应答数据

// 在下一个页面中设置返回的应答数据包裹
Intent responseIntent = new Intent();
responseIntent.putExtras(responseBundle);

// 在下一个页面中返回数据给上一个页面
setResult(RESULT_OK, responseIntent);
finish();
```

在上一个页面中,我们首先定义了一个请求码REQUEST_CODE,用于标识此次请求。然后使用startActivityForResult()方法启动下一个页面,并将请求码REQUEST_CODE作为参数传入。

在下一个页面中,我们首先通过getIntent()获取上一个页面传递的请求数据,并进行解析和处理。然后创建一个Bundle对象,将应答数据存入其中。之后,我们通过setResult()方法将应答数据和结果码RESULT_OK设置给Intent,然后调用()方法结束当前页面,并将数据返回给上一个页面。

最后,在上一个页面中重写onActivityResult()方法,判断请求码和结果码,若一致则取出应答数据进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值