Android不同方式启动导致重复启动相同的Activity的问题解决办法(转载,解决了我的问题)

打开程序入口有好多种方法:

1、shell命令打开运行

2、Launcher待机界面运行

3、状态栏启动运行

4、桌面快捷方式运行

5、软件中调用运行

6、安装软件后执行“open/打开”运行

如果用户安装后立即执行“open/打开” 运行或者用adb shell命令运行应用程序,然后点HOME键把程序挂起,

然后再采用其他发送启动程序,这样则会再启动一个Main程序,

导致用户要点击多下才能退出程序,

那么原因是什么呢?

这是因为Intent的处理机制是,先比较Activity,再比较Action、Flag、bnds。。。,前后两张方式的Action不一样,

一个有LAUNCHER ACTION,一个没有,所以会认为是启动两个不同的INTENT。

那么问题来了,解决bug技术哪家强呢?

哈哈,很简单:可以尝试在AndroidManifest.xml文件中的启动activity一项中加入参数:

android:launchMode="singleInstance"

问题又来了为什么这行代码那么神奇呢,我们看看这行代码的原理:

当一个Acitivty被设置成singleInstance模式后,该Acitivity就会有一个独享的任务栈,当它一旦被创建就不会再重新创建。

这下全明白了吧,

当然也会有一点点后遗症,如果你在使用startActivityForResult的时候:

解释什么是startActivityForResult:A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A-Activtiy

这个时候如果你吧A-Activity设置成singleInstance模式的话就收不到B-Activity返回的数据了,原因呢:

很简单,因为A-Activity不能被重新创建,不会执行回调,当然就不好用了,嘿嘿,解答完毕。

重点:发现一个问题时如果用Home键把程序挂到后台,再点击运行常规是直接进入原来已有的界面,但设置成singleInstance模式后启动会重新加载这个Acitivity,

神烦,正在想解决办法。

转载的链接:http://www.th7.cn/Program/Android/201410/305710.shtml

时间: 2024-08-05 03:42:50

Android不同方式启动导致重复启动相同的Activity的问题解决办法(转载,解决了我的问题)的相关文章

android activity启动的4种方式记录及打开其他应用的activity的坑

Android启动的四种方式分别为standard,singleTop,singleTask,singleInstence. standard是最常见的activity启动方式,也是默认的启动的方式.当启动一个activity的时候他将进入返回栈的栈顶.系统不会管栈内是否有相同的activity,方式像后入先出. singleTop方式是在活动启动的时候,系统先判定栈顶是否有相同的活动,如果没有则新建活动,否则将不新建活动.而是直接使用他. singleTask方式在活动启动的时候,系统先判定栈

Android性能优化系列之App启动优化

Android性能优化系列之布局优化 Android性能优化系列之内存优化 Android性能优化系列之apk瘦身 应用的启动速度缓慢是我们在开发过程中常常会遇到的问题,比方启动缓慢导致的黑屏.白屏问题,本篇博客就将介绍App启动优化的相关知识. 应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时.后台没有该应用的进程.这时系统会又一次创建一个新的进程分配给该应用.这个启动方式就是冷启动. 冷启动由于系统会又一次创建一个新的进程分配给它.所以会先创建和初始化A

Android官方入门文档[12]启动一个活动

Android官方入门文档[12]启动一个活动 Starting an Activity启动一个活动 This lesson teaches you to1.Understand the Lifecycle Callbacks2.Specify Your App's Launcher Activity3.Create a New Instance4.Destroy the Activity 这节课教你1.了解生命周期回调2.指定您的应用程序的启动活动3.创建一个新实例4.销毁活动 You sho

android插件化-apkplug从宿主启动插件Activity-06

插件是一个apk文件它存在自己的Activity界面和UI显示,本节将讲解如何配置插件的启动Activity以及怎样从宿主启动它. 一 配置插件apk的对外启动Activity (内部activity不需要配置) 与普通app不同,插件AndroidManifest.xml配置在apkplug框架中是无效的,我们需要在plugin.xml里面配置才能被apkplug所识别 具体设置属性为 Bundle-Activity="xxx.xxx.xxx.Activity" 只有设置为Bundl

共享一个防止脚本重复启动的shell脚本

项目的一个需求:为防止脚本重复调度,导致同时运行时相互冲突,需要在脚本运行开始前创建一个文件,结束时删除. 脚本启动时判断一下文件是否存在,如果存在则退出. 最开始这样做没发现问题,但跑一段时间后,发现如果进程中间退出没删除文件就会出现问题. 而且有时希望等待一段时间后不管有没有已启动同名脚本,都往下走. 基于以上考虑,最近将这个防止重复启动的逻辑抽离出来成为独立脚本,并增加了一些控制逻辑,这样以后需要类似功能直接调用这个脚本就好. 流程图: 代码: #! /bin/sh # singleton

android启动之SystemServer启动

SystemServer是Android系统的核心,APK应用中能够直接交互的大部分系统服务都在该进程中运行,常见的比如WindowManagerServer(Wms).ActivityManagerSystemService(AmS). PackageManagerServer(PmS)等,这些系统服务都是以一个线程的方式存在于SystemServer进程中. startSystemServer systemServer是通过zygote启动的时候fork启动的,我们先看回到ZygoteIni

android启动之init启动

整个Android系统的启动分为Linux kernel的启动和Android系统的启动.Linux kernel启动起来后,然后就运行第一个用户程序,在Android中,就是init程序,上一博文已经介绍. Init进程始终是第一个进程.Init进程的对应的代码的main函数在目录system/core/init/init.c,先来总体看一下这个main函数. main函数 int main(int argc, char **argv) { //首先声明一些局部变量 int fd_count

【Android】12.2 利用Intent启动和关闭Activity

分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 Android应用程序中一般都有多个Activity,在Activity中,通过调用StartActivity方法,并在该方法的参数中传递Intent对象,就可以实现不同Activity之间的切换和数据传递. 通过StartActivity方法传递intent对象来启动另一个Activity时,可分为两类: l 显式启动:在创建的Intent对象中明确指定启动的是哪个Activity: l 隐式启动:安卓系统根

android源码解析之(十四)-->Activity启动流程

好吧,终于要开始讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍: An activity represents a single screen with a user interface. For example, an email appl