显式意图:一般是用于应用内组件跳转。(如从ActivityA跳转到ActivityB)

隐式意图:一半用于应用之间的跳转。(如从ActivityA跳转到拨号)

隐式意图跳转到百度:

只需将前面MainActivity中的Intent改为如下便可。

public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.baidu.com"));
startActivity(intent);
}

这里Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,常量值是:android.intent.action.VIEW.

然后通过Uri.parse("https://www.baidu.com")将一个网址字符串解析成一个Uri对象。再调用Intent的setData()方法将这个Uri对象传递进去。

setData()方法接收一个Uri对象,用于指定当前Intent正在操作的数据。

运行效果图:

隐式意图跳转到拨号

只需将前面MainActivity中的Intent改为如下便可。

public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:"));
startActivity(intent);
}

将action指定为Intent.ACTION_DIAL,这也是Android内置的动作。

运行效果如下:

点击MainActivity中的按钮,页面就跳转过来了。

界面间传递对象

首先创建一个User对象。让它实现Parcelable接口。

package com.kotlin.activitystudy;

import android.os.Parcel;
import android.os.Parcelable;
/*
只要实现了 Parcelable 接口,一个类的对象就可以实现序列化并可以通过 Intent 和 Binder 传递。
*/
public class User implements Parcelable {
private String name;
private String age;
private String sex; public User(){ } public User(String name, String age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
} protected User(Parcel in) { //从序列化后的对象中创建原始对象,按顺序读取后创建
name = in.readString();
age = in.readString();
sex = in.readString();
} public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) { //从序列化后的对象中创建原始对象
return new User(in);
}
@Override
public User[] newArray(int size) { //创建指定长度的原始对象数组
return new User[size];
}
}; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} @Override
public int describeContents() {//返回当前对象的内容描述。如果含有文件描述符,返回 1,否则返回 0,几乎所有情况都返回 0
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) { //将当前对象按顺序写入序列化结构中,其中 flags 标识有两种值:0 或者 1;为 1 时标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况都为 0
dest.writeString(name);
dest.writeString(age);
dest.writeString(sex);
}
}

修改MainActivity中的跳转代码:

public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,MainActivity2.class);
User user = new User(username.getText().toString(),"18","女");
intent.putExtra("user",user);
startActivity(intent);
}

再修改MainActivity2中的接收代码:

    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
//接收传递过来的数据
Intent intent = getIntent();
if(intent != null){
User user = intent.getParcelableExtra("user");//获取user对象
if(user != null){
information.setText(user.getName()+user.getAge()+user.getSex()+"欢迎登陆");
}else {
information.setText("user为空!!!!!");
}
}else {
information.setText("没接收到任何数据");
}
}

代码都非常简单,来看看运行效果:

也可以实现Serializable接口传递。

Parcelable 与 Serializable 对比

  • Serializable 使用 I/O 读写存储在硬盘上,而 Parcelable 是直接在内存中读写
  • Serializable 会使用反射,序列化和反序列化过程需要大量 I/O 操作, Parcelable 自已实现封送和解封(marshalled &unmarshalled)操作不需要用反射,数据也存放在 Native 内存中,效率要快很多

部分内容转载自:https://www.jianshu.com/p/e8217c36cd9a

Android四大组件——Activity——Activity之间通信下的更多相关文章

  1. Android四大组件之Activity(活动)及其布局的创建与加载布局

    Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个 ...

  2. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  3. 【Android开发日记】之入门篇(四)——Android四大组件之Activity

    在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页 ...

  4. Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

                如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com   ...

  5. Android四大组件及activity的四大启动模式

    Android四大组件 1. 广播接收者的两种类型: (1)系统广播接收者,就是继承BroadcastReceiver这个类,然后还要在清单文件中注册,注册之后给他一个action.当系统发生了这个a ...

  6. Android 四大组件之 Activity(二)

    1.综述 Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满 ...

  7. Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)

    什么是Activity 关键字:应用组件.四大组件.用户界面,交互. An Activity is an application component that provides a screen wi ...

  8. Android 四大组件之 Activity(一)

    1.Activity的定义及作用: Android系统中的四大组件之一,可以用于显示View.Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的一个应用程序的组 ...

  9. [Android基础]Android四大组件之Activity总结

    1.Activity简介 Activity是Android一个非常重要的用户接口(四大组件之一),是可见的,主要是用户和应用程序之间进行交互的接口.在每个Activity中都可以放很多控件,所以也可以 ...

  10. Android 四大组件之Activity(续2)

    1.生命周期 关于生命周期,在详细讲解下: 上图是从android官网获取的生命周期. 正常的流程,很多文章都讨论过了,我们讨论几个特殊的情况. 1)OnResume->OnPause-> ...

随机推荐

  1. [SPDK/NVMe存储技术分析]010 - 理解SGL

    在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持 ...

  2. sublime settings

    { "font_face": "Monaco", // 编辑器的字体 "font_size": 13, // 字号 "highli ...

  3. 基于JDK的动态代理原理分析

    基于JDK的动态代理原理分析 这篇文章解决三个问题: What 动态代理是什么 How 动态代理怎么用 Why 动态代理的原理 动态代理是什么? 动态代理是代理模式的一种具体实现,是指在程序运行期间, ...

  4. 【编程教室】PONG - 100行代码写一个弹球游戏

    大家好,欢迎来到 Crossin的编程教室 ! 今天跟大家讲一讲:如何做游戏 游戏的主题是弹球游戏<PONG>,它是史上第一款街机游戏.因此选它作为我这个游戏开发系列的第一期主题. 游戏引 ...

  5. Rabbit MQ 怎么保证可靠性、幂等性、消费顺序?

    RabbitMQ如何保证消息的可靠性 RabbitMQ消息丢失的三种情况 生产者弄丢消息时的解决方法 方法一:生产者在发送数据之前开启RabbitMQ的事务(采用该种方法由于事务机制,会导致吞吐量下降 ...

  6. Eureka和Zookeeper区别?

    (1)Eureka取CAP的AP,注重可用性,Zookeeper取CAP的CP注重一致性. (2)Zookeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但选举期间不可用. (3)eureka的 ...

  7. Mybatis mapper文件占位符设置默认值

    如果要设置占位符默认值的话:需要进行 设置 org.apache.ibatis.parsing.PropertyParser.enable-default-value 属性为true启用占位符默认值处 ...

  8. Thread 类的 sleep()方法和对象的 wait()方法都可以让线 程暂停执行,它们有什么区别?

    sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程 暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保 持,因此休眠时间结束后会自动恢复(线程回 ...

  9. jQuery--事件案例(鼠标提示)

    1.文字提示 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  10. 使用 Redis 有哪些好处?

    1.速度快,因为数据存在内存中,类似于 HashMap,HashMap 的优势就是查 找和操作的时间复杂度都是 O1) 2.支持丰富数据类型,支持 string,list,set,Zset,hash ...