Android开发中Activity相互跳转,数据传输和一键关闭


一、Activity相互跳转

Activity之间主要通过Intent进行相互跳转。

Intent是一种运行时绑定(run-time binding)机制,可以应用于两个应用间的通讯交互,也能够应用于在同一个应用下不同组件的交互(activity、service、broadcast receiver)。

跳转方式分为显式Intent和隐式Intent。

显式Intent

需要知道要跳转的包名和类名,

Intent intent = new Intent(Context packageContext, Class<?> cls);
startActivity(Intent)

参数:
Context packageContext:程序根据其判断要跳转的包名。假设上述代码是写在MainActivity中,则此处写MainActivity.this。(如果在类中的内部类或本类中引用了其他类的方法(或重写)的时候,使用this指内部类或者其他的类,而不是外部类。此时MainActivity.this != this)
Class<?>cls:组件类,相当于从之前的Activity跳转到这个组件类。假设此处是FirstActivity,则写FirstActivity.class。

隐式Intent

首先需要在Manifest包下找到AndroidManifest.xml文件,对需要跳转的Activity进行如下修改:

<activity
<!--这里是对Activity的注册(例如 android:name=".FirstActivity"-->
>
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

因此代码可以写成:

Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);

二、数据传输

发送数据

承接上文相互跳转,数据传输使用的是Intent下的putExtra方法。其源码(快捷键Ctrl+Shift+I)如下:

public Intent putExtra(String name, @Nullable String value) {
        throw new RuntimeException("Stub!");
    }

可以看出其是以键值对的方式传递值的。

接收数据

在接收数据的Activity中编写如下

String text = getIntent().getStringExtra(key);	//key是发送数据键值对中的key
TextView textView = findViewById(R.id.tv);
textView.setText(text);

这里是用TextView接收数据。

一键关闭

这里使用的是单栈模式。
首先需要在Manifest包下找到AndroidManifest.xml文件,对最底层的Activity(一般为MainActivity)进行如下修改:

android:launchMode="singleTask"

然后在最底层的Activity中重写方法onNewIntent()。

public static final String EXIST = "exist";
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (intent != null) {
            boolean isExist = intent.getBooleanExtra(EXIST, false);
            if (isExist) {
                this.finish();
            }
        }
    }

最后在一键关闭的Activity中调用putExtra()传递值到最底层的Activity中:

intent.putExtra(MainActivity.EXIST, true);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验四 Android基本组件交互实验 【实验目的】 本实验是Android基本组件实验,主要针对Activity、Service和Receiver实现和使用方 法。通过实验使学生掌握Activity跳转、Service的启动停止以及Receiver的接受等。 【实验要求】 使得学生熟悉Activity、Service和BroadCast基本使用; 使得学生掌握短信接收实现和使用; 使得学生掌握界面跳转基本原理和使用方法; 使得学生掌握服务和广播的基本机制。 【实验原理】 1. Activity跳转 startActivity——跳转到目标页面,参数为Intent; startActivityForResult ——跳转到下一个Activity,而当这个Activity关闭以后,自动跳转前一个Activity ,并调用onActivityResult( )方法,参数为Intent和requestcode 2. Intent Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,将要执行的动作的抽象的描述,一般来说是作为 参数来使用,由Intent来协助完成Android各个组件之间的通讯 。 Intent属性: Action ,对执行动作的描述,在Intent类定义了一些字符串常量作为标准动作; data ,是对执行动作所要操作的数据的描述,Android采用URI来表示数据; 例:VIEW_ACTION content://contacts/1表示显示标识符为"1 的联系人的详细信息。 catagory 类别,是被执行动作的附加信息; extra 附加信息,除了data之外,还可以通过extra附加信息,extra属性使用Bundle类 型进行数据传递; component 组件,显式指定Intent的目标组件的名称; type 数据类型,显式指定Intent的数据类型; 3. Service组件 Service一般由一个Activity或其他Context对象来启动,当启动Service之后,该Se rvice将会在后台运行,及时启动这个Service的Activity或其他组件的生命周期已经结 束,Service仍然会继续运行,直到自己的生命周期结束为止。每个Service都应该在nd roidManifest.xml进行声明。Service的启动方式有两种,对应的生命周期也各不相同 。 通过startService方法启动。当系统调用startService方法,如果该Service还未启 动,则依法调用其onCreate方法和onStart方法来启动。当其他Context对象调用stopSe rvice方法、Service调用自身的stopSelf或stopService方法时才会停止Service的执行 。 通过bindService方法启动。当系统调用bindService方法时,如果该Service未启动 ,则会调用onCreate方法完成初始化工作,然后会将该Service和Context对象(如Activ ity)进行绑定,当被绑定的Context对象被销毁时,与之绑在一起的Service也会停止运 行。 4. Broadcast Receiver组件 Broadcast Receiver同Service一样,并不提供与用户交互的表示层,其实是一种负责接收广播消息 并对消息作出反应的组件。在Android的系统就存在许多这样的广播,比如电池电量过 低或信号过低时,系统就会发出广播进行通知。 应用程序如果需要响应某一个广播消息,应该注册对应的BroadcastReceiver对象, 该对象继承自BroadcastReceiver类,该类位于android.content包。这样一来当系统或 另外的应用程序发出特定广播时,该应用程序就可以接受并做出回应,如启动Activity 等。 接受广播的时候就需要通过IntentFilter对象来进行过滤。BroadcastReceiver的生 命周期比较简单,其只有一个回调方法-- onReceiver,该方法在应用程序接受到发给自己的广播的时候调用,所以BroadcastRece iver的使用方法也相对简单,只需要对onReceive方法进行合理重写,在适当的地方注册 该BroadcastReceiver即可。 注册BroadcastReceiver对象的方式有以下两种。 在AndroidMannifest.xml文件声明。注册信息包裹在<receiver></receiver>标签 ,并在<intent-filter>标签内设定过滤规则。 在代码创建并设置Int

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值