android 关于先登录成功后再进入目标界面的思考 ,kotlinlambda表达式的脱离

本文探讨了如何在Android应用中实现登录拦截,确保用户在登录成功后才能进入目标界面。作者分析了两种常见的解决方案,即使用拦截器和路由框架,但发现它们并不完全符合需求。随后提出了一个基于验证队列的数据模型`CallUnit`,它包含了目标行为和多个前置验证条件。当所有条件满足后,才会执行目标行为。这个解决方案旨在提供一种更加优雅的方式来处理登录和其他前置条件,避免在登录界面引入过多业务逻辑。
摘要由CSDN通过智能技术生成

需求定义

所以这里有两个需求: 1、自动跳转到登录界面 2、登录成功后再自动跳转到目标A界面

如果我们直接判断用户有没有登录,提醒用户登录。也没有让用户登录成功后再直接跳转到目标界面,这样的用户体验恐怕是不能满足一个高逼格程序员的要求。那么,我们来思考下,如何才能更加优雅的完成这个工作呢?

当然,在开始之前,我们可以先了解下其他人都是怎么做的,毕竟我们可以站在巨人的肩膀上才能看得更远。

思考可行的方案

首先我们第一个想到的解决方式,就是拦截器。如果我们在进入A界面的时候,可以在操作之前加入一个拦截器的话,岂不是可以做到在进入A界面前的判断呢?

在google之后,找到两个方案。

A、 Android拦截器 (可以点击查看)

此方案通过注解。在进入目标界面A时,判断是否有指定的拦截器,如果有,则检验是否满足拦截器要求,不满足,则执行拦截器的处理,处理完成后,通过onActivityResult最后触发invoke的回调方法。

此方案和我们需求略有不同,那么说下此方案存在的缺点: 1、用了继承的方式,来插入invoke的回调方法。由于java的单继承的特性,如果工程中已经有基类的情况,调整起来比较麻烦。侵入性太高。

2、此方案中,在没有登录的情况下,其实已经进入了目标A页面。相应的初始化都已经执行了。如果没有登录成功,这样工作其实是白做了。如果目标A界面要登录才能进入的话,此方案不符合要求的。

B、我们直接使用路由框架,参考下阿里的ARouter方案,可以看到,我们可以在固定路由上面插入拦截器。这里有一篇文章介绍 阿里ARouter拦截器使用及源码解析

看了文章后,发现拦截器实现的非常优雅,但是依然不是我们想要的。因为这个拦截器执行完后,马上会执行目标方法。中间并不会等待。所以我们根本没有办法去执行我们的登录操作。 所以pass了。

我们再回过头来思考,拦截器似乎并不能直接完成我们的需求,因为我们需要插入一个验证行为后(例如进入登录界面),还要执行相应的操作后,保证这个验证行为通过后,才能真正进入到我们的目标界面。

其实如果我们只是单纯的完成这个功能的话,可能大家最容易想到的就是,在进入登录界面的时候,在intent中装载一个目标target的intent.如果登录成功了,就判断是否有目标target,如果有,就跳转到目标target.

Intent intent = new Intent(this,LoginActivity.class);
Intent target = new Intent(this,OrderDetailActivity.class);
intent.putExtra(“target”,target);
startActivity(intent);

这种方式做起来非常直接,也可理解,但是最明显的问题就是,会导致登录界面多了很多与自己无关的业务判断。那我们继续google看看,有没有类似的做法,并且实现优雅一点的呢?

Android 登录判断器,登录成功后帮你准确跳转到目标activity 这篇的访问量比较大,似乎是个比较靠谱的方法。我们来大概分析下它的做法。

public static void intercep

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值