📢📢📢 阿里云双十一,赠送您一张全场8折折扣优惠券

📢📢📢 2核2G3M的服务器,99元一年,新老用户续费同享!!

安卓中使用AliasActivity解决应用重复打开

之前遇到一个问题  微信支付完成后要跳转到一个指定的activity    虽然可以给这个activity设置dialog的样式 让它看起来好像是个弹框一样    但是毕竟还是另外的activity 支付后的回调数据无法直接传到调起支付的那个activity     和支付宝支付的逻辑有点不一样     于是我就想    有没有方法可以 给activity起别名    类似linux的硬链接   然后找到了    果然有AliasActivity这个类    但是和想象的不一样额。。。。。。

从源码可以看出来  AliasActivity是继承自Activity的 所谓的别名其实也是很简单的在它的onCreate里面调用startActivity跳转到目标Activity 并吧相关intent里面的data传过去 然后再把自己finish掉 做成一种直接跳转过去的假象 其实这过程中间是有个中间Activity的

AndroidManifest.xml 里面使用如下:

1
<activity-alias android:name=".TestAliasActivity" android:targetActivity=".MainActivity"/>

这样的话  Intent intent=new Intent(this,TestAliasActivity.class);   每次都会跳转到 mainactivity去了  不过首先要新建一个继承自AliasActivity的 TestAliasActivity的类  里面为空也好或者加一些动作反正都没关系   因为继承自Activity  所以大部分Activity的属性都可以用

虽然这个类没有解决前面那个微信支付回调的问题  但是它解决了我另外一个问题

问题回放:

  1. 将应用安装包放到手机里面
  2. 用文件管理器找到然后点击安装,等待安装
  3. 安装完毕,然后这里一般会有两个操作   完成或者打开  ,  这里选择点击打开
  4. 打开之后进入应用,不需要其他操作 ,直接按Home键返回桌面,不要清理后台应用
  5. 从桌面或者launcher点击应用图标,

好了, 于是问题出现了
应用会再次重新打开,而不是从后台直接将之前的调出来。如果应用有splash的话效果会比较明显   如果这里再按Home键返回桌面,再次点击图标进入,结果还是重新打开,仔细研究会发现,应用不是重新启动了,而是在原本已经启动的状态下又新启动一次应用,后来去查了这个问题,发现好多都遇到这个问题,原理都很清楚,和安卓应用的task栈相关。 但是好像没有好的解决办法, 修改activyt的launchMode什么的如果应用没有spalsh的话是可以解决的   但是如果有splash  这个方案完全不行  他们说很多应用都有这个问题  我试了一下   果然qq也存在这个问题

但是后来遇到AliasActivity后  发现了一个新的解决方案,  我真机智

1
2
3
4
5
6
7
8
9
10
11
<activity android:name=".SplashActivity" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
<activity android:name=".HomeActivity" />
<activity-alias   android:name=".SplashAliasActivity"
android:targetActivity=".SplashActivity"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>

这个的话是直接吧AliasActivity作为启动的activity

这个算是一个小技巧吧反正  没什么技术含量