首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OnActivityResult方法已弃用,还有什么替代方法?

OnActivityResult 方法在 Android 开发中已被弃用,主要是因为 Google 引入了新的 Activity Result API 来处理 Activity 之间的结果传递。新的 API 提供了更清晰、更灵活的方式来处理异步操作的结果。

替代方法:Activity Result API

基础概念

Activity Result API 是一组新的接口和类,用于替代传统的 startActivityForResultonActivityResult 方法。它通过使用 ActivityResultLauncherActivityResultContracts 来简化结果的传递和处理。

优势

  1. 类型安全:使用 ActivityResultContracts 可以提供类型安全的结果处理。
  2. 生命周期感知:新的 API 能够更好地处理 Activity 和 Fragment 的生命周期。
  3. 简化代码:减少了样板代码,使代码更加简洁和易读。

类型

  • ActivityResultContract:定义了启动 Activity 和接收结果的契约。
  • ActivityResultLauncher:用于启动 Activity 并处理结果。

应用场景

适用于需要从一个 Activity 启动另一个 Activity 并接收结果的场景,例如图片选择、权限请求等。

示例代码

代码语言:txt
复制
import android.content.Intent;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private ActivityResultLauncher<Intent> activityResultLauncher;

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

        activityResultLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getResultCode() == RESULT_OK) {
                        Intent data = result.getData();
                        // 处理结果
                    }
                }
            });

        // 启动另一个 Activity
        Intent intent = new Intent(this, AnotherActivity.class);
        activityResultLauncher.launch(intent);
    }
}

参考链接

Android 官方文档 - Activity Result API

通过使用 Activity Result API,你可以更轻松地处理 Activity 之间的结果传递,并且代码更加简洁和易于维护。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Thread类方法

Thread 类除了有一些有用的方法之外,还有一些危险的方法,开发者不应该使用。这些方法是 Java 线程 API 原来提供的,但很快就发现不适合开发者使用。...可惜的是,因为 Java 要向后兼容,所以不能把这些方法从 API 中移除。开发者要知道有这些方法,而且在任何情况下都不能使用。...这和并发安全等原则完全相悖,因此绝对不能使用 stop() 方法。...其实,这种机制会导致死锁之间的条件竞争,而且 resume() 会导致这几个方法不能使用。 destroy() 这个方法一直没有实现,如果实现了,会遇到与 suspend() 方法一样的条件竞争。...开发者始终应该避免使用这些方法。为了达到上述方法的预期作用,Java 开发了一 些安全的替代模式。前面提到的“关闭前一直运行”模式就是这些模式的一例。

68710
  • 学习Android时发现别人写的方法已被怎么办

    但是我们如何才能找到这个方法的更新版本呢? 首先我们打开Google的Android官方网站:Android Developers,如下所示: ? 然后在搜索栏中搜索。...但是注意我们不要直接搜索方法名,就如此例中的:getDrawable()方法,因为并不会提供任何结果,而是应当搜索此方法所属的类,而类我们通过Android Studio就可以查询到了: ?...我们发现现在的此方法需要输入Theme,但是可以选择输入nulll,我们就简单一点,修改原来的方法,多输入一个参数null,如下: ? 可以看到现在所示的方法就不在提示方法用了。...其余方法若被废弃,完全可以按照这种处理方式来,这里就不多演示了。

    1.9K10

    gtk还有吗_iperf使用方法

    GTK+:GTK+的简介、安装、使用方法之详细攻略 目录 GTK+的简介 1、GTK特点 GTK+的安装 1、基于Windows平台安装 第一步、下载GTK+ 第二步、安装GTK+ 第三步、加载系统环境变量...第四步、运行命令测试 第五步、利用python预测测试 GTK+的使用方法 1、C++语言实现 2、python语言实现 ---- GTK+的简介 GTK+(GIMP Toolkit)...已经为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME) GTK+ 为用户提供完整的工作环境。...GTK+虽然是C语言写的,但是您可以使用你熟悉的语言来使用GTK+,因为GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Guile,Perl, Python, TOM, Ada95,...GTK+的使用方法 1、C++语言实现 #include int main(int argc, char *argv[]) { GtkWidget *window

    1.3K20

    callable线程使用_java线程结束什么方法

    FutureTask实现了两个接口,Runnable和Future,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值,那么这个组合的使用有什么好处呢...假设有一个很耗时的返回值需要计算,并且这个返回值不是立刻需要的话,那么就可以使用这个组合,另一个线程去计算返回值,而当前线程在使用这个返回值之前可以做其它的操作,等到需要这个返回值时,再通过Future...下面来看另一种方式使用Callable和Future,通过ExecutorService的submit方法执行Callable,并返回Future,代码如下: public class CallableAndFuture...ExecutionException e) { e.printStackTrace(); } } } } 其实也可以不使用CompletionService,可以先创建一个装Future类型的集合,Executor

    69220

    BeautifulSoup文档4-详细方法 | 什么方法对文档树进行搜索?

    BeautifulSoup的文档搜索方法有很多,官方文档中重点介绍了两个方法: find() 和 find_all() 下文中的实例,依旧是官网的例子: html_doc = """ <head...如果没有合适过滤器,那么还可以定义一个方法方法只接受一个元素参数; 如果这个方法返回 True 表示当前元素匹配并且被找到,如果不是则反回 False; 2 find_all() 搜索当前tag的所有...() 方法找不到目标时,返回 None。...() 方法返回第一个符合条件的前面的兄弟节点。....next_elements 属性对当前tag的之后的tag和字符串进行迭代; find_all_next() 方法返回所有符合条件的节点; find_next() 方法返回第一个符合条件的节点。

    97650

    网址域名ip查询方法,域名有什么

    很多人在有了网址域名之后,就会想要去查询ip,但可能之前一直都没有进行过这样的操作,所以并不知道网址域名ip查询方法,ip查询其实并不难,我们掌握了它的查询方法,网址域名ip查询就会非常简单了。...image.png 网址域名ip查询方法 关于网址域名ip查询方法,我们最常见的就是通过命令查找了,我们可以先打开运行界面,然后输入cmd,在点击了回车键之后就会出现命令提示符的界面,然后输入nslookup...通过这样的方法会出现查询不到的情况,我们可以更换一个服务器,再次进行查询。如果说还是不太清楚的话,也可以选择更为简单的方式,打开在线查询的网站,就可以查询ip地址了。...域名有什么 网域名的作用非常多,域名可以实现国际间的互联,有了一个合法的域名之后,我们就可以拥有网站了,在属于自己的网站上,我们可以进行品牌的建设,这对企业的品牌提供了极大的便利。...上面已经向大家介绍了网址域名ip查询,其实网址域名ip查询方法是非常多的,大家可以根据自己的实际情况选择这些查询方法,现如今的信息发展迅速,域名也越来越受到人们的重视了。

    12.6K20

    什么说二叉树遍历递归的方法不如非递归方法?

    非递归的方法存储代替计算,就是在建立树时,实现了存储展开,相当于存储了未来需要遍历的路径,所以就快了。...实际用途中如果用于商业一般数据库代替,根本用不到二叉树,是存储代替计算。速度快,可以内存数据库,如我h2 database的Memory Mode 在java下可以实现1秒1百万次插入。...sqlite内存模式代替以前在c++需要手工管理的数据结构。数据量大一个电脑存不下时,hadoop/spark/redis,对分布式大数据支持比较好。...如果用于计算量大的任务或内核结构,可以矩阵数组,链表,k/v这种比较直观模式存储。 对于树和图这种在内存中复杂的数据结构,尽量不要在生产环境下使用,容易内存泄露,简单方式代替。...当然如果你写加密算法,这种要求极高的程序时,还是需要考虑性能最大化的,否则一般存储代替遍历计算,因为内存和硬盘,现在很便宜了,而cpu还是一种宝贵的资源。

    99620

    多态polymorphism,向上转型和动态方法调度有什么

    多态有什么?...如果用户输入小轿车,就执行小轿车的驾驶方法。这是就用到父类指针指向子类时的override。2)如果你有一千个子类。要求你依次执行这一千个子类当中的打印。你当然可以一个一个实例化子类后分别执行。...通用的基类指向所有的派生类。几行程序即可,你可以参照本节的例子。不用这技术, 还真解决不了这问题! ...Polymorphism means one type,many form Dynamic method binding(dynamic method dispatch),方法覆盖仅在两个方法的名称和类型声明都相同时才发生...动态方法调度(dynamic method dispatch)是一种在运行时而不是编译时调用方法的机制。 动态方法调度也是Java实现运行时多态性的基础。

    41550
    领券