使Activity只存在一个实例(解决微信登录 原有登录界面无法关闭)

前言

最近项目集成微信登录中遇到一个问题:微信登录成功后,退出应用时,原有的普通登录页面还存在。

第一反应就是在跳转的时候怎么将其finish(),后来结合实际情况,好像并不方便。
于是想到:在跳转后续页面的时候,从LoginActivity中转一下,然后到达指定页面,这样就可以将LoginActivity关闭。
于是面临一个新问题,如何让LoginActivity只创建一次,于是我们想到了launchMode。

  • 这里我们使用singleInstance,在AndroidManifest.xml文件中配置:
<activity
    android:name=".LoginActivity"
    android:launchMode="singleInstance" >
</activity>
  • 我们还需要在LoginActivity重写onNewIntent(Intent intent)方法:
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // 跳转首页或者其他操作
    ...
}

至于我们为什么不使用singleTask,因为在创建WXEntryActivity时创建了新的任务栈。singleTask在新的任务栈需要创建新的LoginActivity实例;而使用singleInstance,无论位于哪个Task中,系统都会把该LoginActivity所在的Task转到前台并显示LoginActivity。

Android四种启动模式

  • standard:每次调用startActivity()启动时都会创建一个新的Activity放在栈顶(默认模式)
  • singleTop:启动Activity时,指定Activity不在栈顶就创建,如在栈顶,则不再创建
    注:不会出现两个相同的Activity相邻
  • singleTask:如果启动的Activity不存在就创建Activity,如果存在直接跳转到指定的Activity所在位置
    注:在其上面的Activity会被移出栈,也就是一个栈中不能有重复的Activity
  • singleInstance:如果启动的Activity不存在就创建一个Activity同时创建一个栈,如果存在就将指定的Activity存在的栈移动到栈顶
    注:表示这个Activity只能存在于一个独立的任务栈中,同应用的其它Activity与其无关
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容