android同时打开多个Activity的方式(应用于启动页面广告等场景)
2016-02-28 00:33
716 查看
现在很多的App都有启动页面,很多产品经理都会把启动页面做成一个广告页面,那么有广告就会有跳转,这时,跳转到广告的页面之后,我们退出广告页面后,就应该是回到首页。那么这个怎么实现是最好的呢?
如果你看到这里了,应该会想:这还不简单,在广告页面写个跳转到首页不就行了。但是如果我广告页面还有别的入口呢?你还会继续想:这样我做个判断就可以了呀。那么我广告页面有多个呢?这样继续下去是不是而非常不利于扩展性、不利于维护了?
作为一个想写出优质量代码的程序员,这样的代码肯定不能出自我们之手了,那么怎么解决这个问题呢?
想一下这个需求,实际上就是在进行广告跳转之前先打开我们的首页,然后再进去广告页面。说白了就是Activity的Stack先进后出的原理。
这里给大家提供了三种方式:
startActivity(),大伙都用过,进行一个Activity的跳转,都已经用烂了。而startActivities看名字和参数就知道,可以进行多个Intent的跳转,跳转的方法就是根据intents数组里面的intent顺序进行跳转,排在后边的最先显示出来,排在前面最后显示出来,这个有点类似stack里面的先进后出的原则了。怎么使用如下:
具体效果:
可以看到,效果完全是我们想要那种,而且代码就是上面那几行,不需再去里面的Activity里面去判断。
具体实现如下:
同样的是一个intent数组,只不过这个是用PendingIntent.send();方法来进行执行的。我们来效果:
可以看到效果跟第一种方法实现的效果是一样的。
效果就不贴了,跟上面两种是一样的。
到这里大家就可以很明显的看出来,哪种的扩展性,维护性比较高了!
都是一些基础的知识点的利用,不是比较难、深入的逻辑和知识点,只是一些不是很常用的AndroidAPI,非常实用的哦。
如果有大神有比这个更加好的办法,欢迎在下面留言,大家一起交流哈……..
如果你看到这里了,应该会想:这还不简单,在广告页面写个跳转到首页不就行了。但是如果我广告页面还有别的入口呢?你还会继续想:这样我做个判断就可以了呀。那么我广告页面有多个呢?这样继续下去是不是而非常不利于扩展性、不利于维护了?
作为一个想写出优质量代码的程序员,这样的代码肯定不能出自我们之手了,那么怎么解决这个问题呢?
想一下这个需求,实际上就是在进行广告跳转之前先打开我们的首页,然后再进去广告页面。说白了就是Activity的Stack先进后出的原理。
这里给大家提供了三种方式:
第一种 利用startActivites
startActivities(Intent[] intents);
startActivity(),大伙都用过,进行一个Activity的跳转,都已经用烂了。而startActivities看名字和参数就知道,可以进行多个Intent的跳转,跳转的方法就是根据intents数组里面的intent顺序进行跳转,排在后边的最先显示出来,排在前面最后显示出来,这个有点类似stack里面的先进后出的原则了。怎么使用如下:
Intent intentIndex = new Intent(this, IndexActivity.class); Intent intentAdvertisement = new Intent(this, AdvertisementActivity.class); Intent[] intents = new Intent[2]; intents[0] = intentIndex; intents[1] = intentAdvertisement; startActivities(intents);
具体效果:
可以看到,效果完全是我们想要那种,而且代码就是上面那几行,不需再去里面的Activity里面去判断。
第二种 PendingIntent
PendingIntent,用过推送或者通知栏的朋友肯定知道是干嘛,延迟发送Intent。不过我们今天不是要延迟发送Intent,而是要通过PendingIntent来实现同时打开两个Activity,其实这个原理跟上面startActivites一样的原理,只是方式有些不同而已。具体实现如下:
Intent intentIndex = new Intent(this, IndexActivity.class); Intent intentAdvertisement = new Intent(this, AdvertisementActivity.class); Intent[] intents = new Intent[2]; intents[0] = intentIndex; intents[1] = intentAdvertisement; PendingIntent mPendingIntent = PendingIntent.getActivities(this, 0, intents, 0); try { mPendingIntent.send(); } catch (PendingIntent.CanceledException e) { e.printStackTrace(); }
同样的是一个intent数组,只不过这个是用PendingIntent.send();方法来进行执行的。我们来效果:
可以看到效果跟第一种方法实现的效果是一样的。
第三种 通过传递Intent的方式
这种方式有点类似于blog开头说的那种方式,我们在Intent的Bundle里面添加一个Intent进行跳转,也就是说在广告的Activity里面进行一次判断,为空的话,就是正常finish;不为空就利用这个Intent进行跳转,具体实现如下://在启动页面跳转里面: Intent startIntent = new Intent(this, AdvertisementActivity.class); Intent attachIntent = new Intent(this.getApplicationContext(), IndexActivity.class); startIntent.putExtra("attachIntent", attachIntent); startActivity(startIntent); //在广告的页面,重写onBackPressed方法,在里面进行一次判断就行。: @Override public void onBackPressed() { if (getIntent().getParcelableExtra("attachIntent") != null) { startActivity((Intent) getIntent().getParcelableExtra("attachIntent")); } super.onBackPressed(); }
效果就不贴了,跟上面两种是一样的。
到这里大家就可以很明显的看出来,哪种的扩展性,维护性比较高了!
都是一些基础的知识点的利用,不是比较难、深入的逻辑和知识点,只是一些不是很常用的AndroidAPI,非常实用的哦。
如果有大神有比这个更加好的办法,欢迎在下面留言,大家一起交流哈……..
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories