android中Activity的singletask模式弹出栈的问题

问题描述

android中Activity的singletask模式弹出栈的问题

07-14 17:48:53.218: E/First(8272): onDestroy
07-14 17:48:53.226: E/Second(8272): onDestroy
07-14 17:48:53.226: E/Third(8272): onPause
07-14 17:48:53.250: E/MAIN(8272): onRestart
07-14 17:48:53.250: E/MAIN(8272): onStart
07-14 17:48:53.250: E/MAIN(8272): onResume
07-14 17:48:53.335: E/Third(8272): onStop
07-14 17:48:53.335: E/Third(8272): onDestroy

Main是singletask启动模式
顺序是Main->First->Second->Third->Main

再次启动Main把上面的activity全部弹出,按照栈先进后出的结构,不是应该从Third开始到First,怎么是反过来的。

解决方案

按back键的话,肯定是按照入栈顺序出栈
但是你现在是相当于启动一个新的activity,但是由于activity是singletask模式,所以系统会先检查是否已经有实例,
发现有,然后就把实例之上的统统出栈,之保证出栈,没保证出栈要按照入栈的顺序

解决方案二:

楼上正解,如果Activity指定的启动方法为android:launchMode="singleTask"。
当实例化MyActivity时候,系统会检测是否有MyActivity实例的存在,如果有不在生成新的实例,而是在此栈中将MyActivity上面的Activity实例全部出栈。将MyActivity实例置于栈顶,显示到屏幕前面。

时间: 2024-12-25 04:35:46

android中Activity的singletask模式弹出栈的问题的相关文章

Android使用Activity实现从底部弹出菜单或窗口的方法

本文实例讲述了Android使用Activity实现从底部弹出菜单或窗口的方法.分享给大家供大家参考,具体如下: 这里使用activity实现弹出滑动窗口或菜单,主要是使用了一些设置activity的样式来实现弹出窗口和滑动效果,实现如下: 第一步:设计要弹出窗口的xml布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://sche

Android中activity的启动模式

activity的启动模式一共有四种:standard.singleTop.singleTask和singleInstance,可以在AndroidMannifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式. 1.standard 是活动默认的启动模式,Android是使用返回栈来管理活动,standard模式下,每启动一个新的活动,它就会在返回栈中入栈,并处于栈顶位置.系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动

Android中Activity启动模式详解,可以控制程序按home键后进来还会调用一个自己不喜欢的界面

其实这是很简单的一个问题.但是这还是要对android中activity的启动模式有相当的理解才行,当点击home键的时候,懂Android的人都知道,他会把当前activity放到后退栈中, 栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算.人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底.向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称为出栈或退栈,它是把栈

简单介绍Android中Activity的四种启动模式_Android

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. singleTop,激活Activity时,如果栈顶是这个Activity,就不会创建新的实例:如果栈顶

简单介绍Android中Activity的四种启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. singleTop,激活Activity时,如果栈顶是这个Activity,就不会创建新的实例:如果栈顶

Android中Activity生命周期和启动模式详解_Android

Activity生命周期经典图解: 按键对生命周期的影响: BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法. 再次启动App时,会执行onCreate()->onStart()->onResume() HOME键: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,A

Android中Activity生命周期和启动模式详解

Activity生命周期经典图解: 按键对生命周期的影响: BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法. 再次启动App时,会执行onCreate()->onStart()->onResume() HOME键: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,A

手机开发-Android 模拟器中按菜单Menu键弹出菜单项MenuItem,点击菜单项中的菜单项没反应!!!

问题描述 Android 模拟器中按菜单Menu键弹出菜单项MenuItem,点击菜单项中的菜单项没反应!!! public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.main,menu); return true; } public boolean onOptionsItemSeleted(MenuItem item){ switch(item.getItemId()) { case R.i

android微信朋友圈点击评论弹出的输入框和列表位置修改

问题描述 android微信朋友圈点击评论弹出的输入框和列表位置修改 android微信朋友圈评论弹出的输入框和列表位置修改, 微信的朋友圈点击评论之后会弹出一个输入框,请问这个是怎么实现的, 还有那个列表会根据输入框来调整位置的功能是怎么实现的, 如果有具体的代码能给我,就太感谢了! 解决方案 写一个linerlayout放在最下面隐藏掉,点击出来获取linerlaout中的edittext焦点并显示出来,软件盘就会弹出来. 解决方案二: 你上下布局,当他为可见时,他自然会顶上去, 解决方案三