广告二级页面的跳转

最近项目有一个需求,就是在自动登录过程中(启动页-->广告页-->首页),需要在广告页添加一个点击图片的事件,然后跳转到到一个二级的广告页,开始要求的的是点击跳转到浏览器,当时没多想就愉快的答应了。后来在实际操作中才发现有个问题,就是点击图片跳转到浏览器之后,二级广告页目前可见,但马上首页就覆盖住这个二级广告页变为可见(ps:此项目之前的逻辑是,在广告页处下载图片并展示,并且在2s后执行自动登录的方法,此方法为框架里的方法,网络请求成功后跳转到首页),但是实际要的效果是,点击广告之后,首页在后台跳转,最终二级广告页可见。想了半天,最终决定二级广告页跳转到一个带WebView的Activity里,并将Activity设置成singleInstance的启动模式。

先复习一下,Activity的四种启动模式

  • standard:标准启动模式(默认启动模式),每次都会启动一个新的activity实例。
  • singleTop:单独使用使用这种模式时,如果Activity实例位于当前任务栈顶,就重用栈顶实例,而不新建,并回调该实例onNewIntent()方法,否则走新建流程。
  • singleTask:这种模式启动的Activity只会存在相应的Activity的taskAffinit任务栈中,同一时刻系统中只会存在一个实例,已存在的实例被再次启动时,会重新唤起该实例,并清理当前Task任务栈该实例之上的所有Activity,同时回调onNewIntent()方法。
  • singleInstance:这种模式启动的Activity独自占用一个Task任务栈,同一时刻系统中只会存在一个实例,已存在的实例被再次启动时,只会唤起原实例,并回调onNewIntent()方法。

通过对比这四种启动模式,很容易看出用singleInstance这种启动模式可以满足需求。我们可以这样做,将此WebView的Activity的启动模式设置为singleInstance,然后在首页onCreate()方法中再次调起此Activity,就可以使其在二级页面时处于可见。可是还有一个问题,如果在首页每次都调起WebView的Activity,显然也不是我们都想要的,于是我们可以在调起时添加一个判断,即在任务栈中是否存在WebView的Activity的实例,存在则调起(只有在点击广告页之后才会跳转二级页面,即生成此实例)。

部分代码如下:

二级广告页
public class ADWebActivity extends WebBaseHttpActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
    }
}
复制代码
自动登录页
public class AutoLoginActivity_JL extends AutoLoginActivity{
    ...
    @Override
    public void onClick(View view) {
        super.onClick(view);
        if (view.getId() == R.id.ad_image) {
            if (!TextUtils.isEmpty(adWebUrl)) {
                stopCountDown();
                AutoLogin();
                goToWeb(adWebUrl);
            }
        }
    }

    /**
     * 跳转H5
     * @param webUrl
     */
    public void goToWeb(String webUrl) {
        Intent intent = new Intent(context, ADWebActivity.class);
        intent.putExtra(WebValues.isBackShow, true);
        intent.putExtra(WebValues.navigationBarDefaultBgColor, context.getResources().getColor(R.color.navigation_background_color));
        intent.putExtra(WebValues.loadWebUrl, webUrl);
        startActivity(intent);
    }
}
复制代码
首页
public class MainActivityxJL extends MainActivityx {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (isADWebFront()) {
            Intent intent = new Intent(context, ADWebActivity.class);
            startActivity(intent);
        }

    }

    private boolean isADWebFront() {
        for (Activity activity : App.listActivitys) {
            if (activity.getClass().equals(ADWebActivity.class)) {
                return true;
            }
        }
        return false;
    }
}

//每次新建一个Activity,都将其实例添加到App.listActivitys
public class App extends Application {
    public static List<Activity> listActivitys = new ArrayList();
}
复制代码

参考文章:Android面试官装逼失败之:Activity的启动模式

转载于:https://juejin.im/post/5acc1d926fb9a028e46ef49e

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值