如何改变activity堆栈式管理在当前任务堆栈中的顺序

11333人阅读
Intent&intent&=&new&Intent();&&
intent.setAction(Intent.ACTION_CALL);&&
intent.setData(Uri.parse("tel:"&+&number));&&
startActivity(intent);&
上面的这段代码就是在一个activity里通过Intent启动另一个activity的实例。
就像前面提到的,一个activity可以启动另一个,包括那些定义在不同应用程序中的。
一个activity就是一个用户界面,可以连续启动很多activity以提高用户体验。当然这个数量是有限的,这要根据手机的硬件配置来决定。上一篇文章中已经介绍,所有打开的activity都是存储在栈中的,所以如果打开的activity过多,会消占去很多的内存和处理器资源,严重时会导致当前应用无法启动或者系统崩溃。
activity是和任务紧密联系的。因为在android系统中,为了保持用户体验,用户想做某件事情是以任务的结构作为逻辑,以应用的形式来表现的。而一个应用又可以包含很多的activity,所以就涉及到activity和task的关系问题。
note:一个task由很多的activity组成。
为了更好的说明举个例子:
TASK1包含三个activity分别是:p,q,r;启动顺序为p--&q--&r
TASK2包含两个activity分别是:a,b;启动顺序为a--&b;
TASK1首先启动p,那么这个p就是执行这个任务的根activity,任务也是定义在这个activity下的。通过属性Manifest文件中的activity属性中的taskAffinity来定义。
&&&&&&& (1)此时p启动后就被压入堆栈,因为此时堆栈中只有这一个activity,所以p处于栈底,也处于栈顶。此时用户能够看到的就是p界面。
&&&&&&& (2)p启动q后,q入栈。此时栈顶为q。q呈现的界面将p覆盖,p进入后台运行(此时是activity生命周期的pause状态)或者进入后台但不运行(此时是activity生命周期的stop状态)。
&&&&&&& (3)q启动r后,r入栈。此时栈顶为r。r呈现的界面将q覆盖,q进入后台运行。
&&&&&&&&(4)按back键后就是调用finish函数结束r (activity)的生命。此时r出栈,r的生命周期结束。
&&&&&&& (5)继续back键,结束q的生命,此时q出栈。
&&&&&&& (6)继续back键,结束p的生命,此时p出栈。
&&&&&&& (7)此时栈内所有activity都已出栈,所以就会显示HOME屏幕界面.
上面的例子已经很明确,如果还不理解请看下面:
1、activity简单解释
简单的的说,任务就是用户所体验到的&应用程序&。它是一组相关的activity,分配到 一个栈中。栈中的根activity,是任务的开始&&一般来说,它是用户组应用程序加载器中选择的activity。在栈顶的activity正是当前 正在运行的&&集中处理用户动作的那个。当一个activity启动了另外一个,这个新的activity将压入栈中,它将成为正在运行中的 activity。前一个activity保留在栈中。当用户按下后退按键,当前的这个activity将中栈中弹出,而前面的那个activity恢复 成运行中状态。
为了更好的理解上面的例子要补充的是:
2、activity的生命周期:
onCreate()-------&onStart()--------&onResume()---------&onSaveInstanceState()-----&onPause()-------&onStop
---------&onDestroy().
3、activity的各种状态的转换:
继续看上面的例子:上面的每一个activity都经历了这样一个过程的大部分。当启动一个activity时,首先是在onCreate处进行初始化界面所需要的信息,如:界面的views,buttons,分配的引用变量等;初始化完成后就会调用onStart,此时就可以看到界面了;当用户与界面进行交互时就会调用onResume函数;当此activity因为被其他activity没有完全覆盖而进入pause状态时就调用onPause(),当被其他activity完全覆盖时就调用onStop函数。在后面的这两种情况下都会调用onSaveInstanceState方法来暂时保存被覆盖的activity的状态,在这些被覆盖的activity重新回到界面上的时候会恢复这些状态;当调用finish方法使,这个activity就被destroy了,也就从栈中移除了。
&& &一个任务中的所有activity一起作为一个单元。整个任务(整个activity栈)可以移动到前台或者后台.假设,例如,当前的任务有四个 activity在栈中&&三个在当前的activity之下。用户按下了HOME键,进入了应用程序加载器,选择了一个新的程序(实际上,是一个新的任 务)。当前的任务进入了后台,新任务的根activity显示出来。然后,过了一会,用户退回到主界面,又重新选择了前一个应用程序(前一个任务),栈中 有四个activity的那个任务,现在出现在了前台。当用户按下BACK按键,屏幕就不会再显示用户刚刚离开的那个activity,而是删除栈顶的 activity,同任务中的前一个activity将被显示出来。
&& & 刚才说明的那些行为,是activity和任务的默认行为。但是有也办法修改它的所有方面。activity和任务的关联,activity在任务中的行为,受控于启动activity的行为对象的标志位和清单文件中的&元素的属性的互相作用。请求者和相应着都要说明发生了什么。
&& 在这里,主要的行为标志为是:
FLAG_ACTIVITY_NEW_TASK&&FLAG_ACTIVITY_CLEAR_TOP&&FLAG_ACTIVITY_RESET_TASK_IF_NEEDED&&FLAG_ACTIVITY_SINGLE_TOP
&& & & 主要的&activity& 属性是:
taskAffinity&&launchMode&&allowTaskReparenting&&clearTaskOnLaunch&&alwaysRetainTaskState&&finishOnTaskLaunch
&& & & 下面一节将说明这些标志和属性都有什么用,他们之间怎么互相影响,应该用什么样的方案来控制它们的使用。
亲和性和新任务
&& &&&& 默认情况下,应用程序中的所有activity,都有一个对于其它activity的亲和性&这是一个对于同一个任务中的其他activity的优先权,然后,通过&&&activity&元素的&taskAffinity 属性可以可以分别为每一个activity设置亲和性。不同应用程序定义的activity可以共享同一个亲和性,或者同一个应用程序定义的 activity可以指定不同的亲和性。亲和性在两种情况下发挥作用:当行为对象启动了一个包含 FLAG_ACTIVITY_NEW_TASK标志的activity,和当一个activity的allowTaskReparenting 属性设置为&true&。
&& &&& &正如前面描述的,一个新的activity,默认情况下,被加载进调用startActivity()方法的activity对象所在的那个任务中。它被压入和调用者所在的同一个栈中,但是,如果行为对象在调用startActivity()方法时传递了FLAG_ACTIVITY_NEW_TASK标 记,系统将用一个不同的任务来容纳这个新的activity。通常,就像这个标记的名字所代表的。它是一个新任务,但是,它不必非要这样。如果已经存在一 个和这个activity亲和性相同的任务,这个activity就会载入到那个任务中,如果不是的话,才会启动新任务。
&& &&& &如果activity的allowTaskReparenting 属性设置为&true&,它就能从他启动时所在的任务移动到另一个出现在前台的任务。例如,假设有一个activity可以根据选择的城市包括天气情况, 它作为一个旅行应用程序的一部分。它和同一个应用程序中的其他activity有同样的亲和性(默认的亲和性)并且允许重组。你的一个activity开 启了天气报告器,所以它属于同一个任务中的这个activity,然而,当旅行应用程序开始运行时,天气报告器将被重新分配并显示到那个任务中。
&& &&&& 有4中不同的启动模式可以分配给&&activity&&元素的&&&&属性。
"standard" (默认的模式)&&"singleTop&"&&"singleTask"&&"singleInstance"
&& & & &这些模式主要区别在以下四点:
哪个任务存放着activity,用来对行为进行响应。&对&standard&&和&singleTop&&模式来说,这个任务是产生行为(并且调用&)的那个&&除非行为对象包含了&&标记。在这种情况下,像前面那节&&描述的一样,将会选择一个不同的任务。
它们是否可以有多个实例。&"standard&"和&singleTop&&类型的activity可以被实例化多次。它们可以属于多个任务,一个特定的任务也可以拥有同一个activity的多个实例。作为比较"singleTask&"和"singleInstance&"类型的activity只限定有一个实例。因为这些activity是任务的根。这个限制意味着,在设备上不能同时有超过一个任务的实例。
是否能有其他的activity在它所在的任务中。"singleInstance&"&类型的activity是它所在任务中唯一的activity。如果它启动了其他的activity,不管那个activity的启动模式如何,它都会加载到一个不同的任务中&&好像行为对象中的FLAG_ACTIVITY_NEW_TASK&标记。在其他的方面,"singleInstance&"和"singleTask&"模式是相同的。其他三种模式运行任务中有多个activity。"singleTask&"总是任务中的根activity,但是它可以启动其他的activity并分配到它所在的任务中。"standard&"和"singleTop&"类型的activity可以出现在任务中的任何地方。
是否启动一个新的实例来处理一个新的行为。&对默认的"standard&"模式来说,对于每一个行为都会创建一个新的实例来响应。每个实例只处理一个行为。对于"singleTop&"模式,如果一个已经存在的实例位于目标任务activity栈的栈顶,那么他将被重用来处理这个行为。如果它不在栈顶,它将不会被重用,而是为行为创建一个新的实例,并压入栈中。例如,假设,一个任务的activity栈由根activity A和 B,C,D从上到下按这样的顺序组成,所以这个栈就是A-B-C-D。一个行为指向类型为D的activity。如果D是默认的"standard&"加载模式,一个新的实例会被启动,栈现在就是这样A-B-C-D-D。但是,如果D的加载模式是"singleTop&",已经存在的实例会用来处理这个行为(因为它在栈的顶端)并且栈中还应该是A-B-C-D。&& 在前面提到,"singleTask&"和"singleInstance&"类型的activity最多只有一个实例,所以他们的实例应该会处理每个新的行为。"singleInstance"类型的activity总是在栈的顶端(因为他是任务中唯一的一个activity),所以总是能够适当的处理行为。然而,"singleTask&"类型的activity也许会有其他的activity在它的上面。如果是这样的话,那就不能处理这个行为,这个行为被丢弃。(即使这个行为被丢弃了,它的到来也会导致那些应该保留不变任务显示到前台来)。
&& 当一个activity被要求处理一个新的行为时,行为对象会通过调用activity的&&&方法传递进来(最初启动activity的行为可以通过调用&方法获得)。
&& &&& 注意,当创建一个新的activity实例来处理一个新的行为时,用户总是能够通过按下BACK按键退回到前面的状态(前一个activity)。但是当 一个已经存在的activity实例处理一个新的行为时,用户不能通过按下BACK按键退回到前面的状态。
&& & &更多关于加载模式的内容,请看关于&&&的描述。
&& & 如果用户离开一个任务很长时间。系统将清除除了根activity之外的所有activity。当用户重新回到任务中时,像是用户离开了它,除了只有最初 的activity还在。这个理念是这样的,过了一段时间,用户很可能放弃之前所做的事情,回到任务去做一些新的事情。
&& & 这只是默认情况,有一些activity的属性可以控制和修改它。
&& &&& 如果一个任务的根activity的这个属性设置成了"true",那么刚才提到的那些默认行为就不会发生。这个任务保留所有的activity,甚至经过了很长一段时间。
&& & & 如果任务的根activity的这个属性设置成了&true&,那么只要用户离开了任务并返回,就会清除除了根activity之外的所有activity。换句话说,它和alwaysRetainTaskState正好相反,当用户返回到任务时,总是恢复到最初的状态,不管离开了多长时间。
这个属性和clearTaskOnLaunch类似,但是它作用于单个activity,而不是整个任务。它可以导致任何的activity离开,包括根activity。当它设置成"true"的时候,作为任务一部分的activity只对当前会话有效。如果用户离开然后返回到任务中。它将不再出现。
&& & & 还有其他的方法强制将activity从栈中移除。如果一个行为对象包含了&&&标志,它的目标任务中已经有了一个这样类型的activity实例,所有栈中位于这个实例之上的activity都会被清除,所以这个实例就会出现在栈顶并且对行为进行响应。如果activity被设计成"standard"模式,它也将会从栈中被清除,并且会启动新的实例来处理到来的行为。这是因为当设置成&standard&模式后,对每个新的行为都会创建一个新的实例。
&& & &FLAG_ACTIVITY_CLEAR_TOP经常&和FLAG_ACTIVITY_NEW_TASK一起使用。当一起使用时,这些标志是定位一个在另一个任务中存在的activity并且将它放在一个可以响应行为的地方的一种方法。
&& &Activity通过将行为过滤器&android&.intent.action.MAIN&设置为指定动作和"android&.intent.category.LAUNCHER"作为指定类型,来成为任务的入口。(前面关于行为过滤器那一些讨论的例子)。这种类型的过滤器会让activity的图标和标签显示在应用程序加载器上面,可以让用户启动和返回activity。
&& &第二个能力更为重要,用户应该可以在离开一个任务一段时间后返回。因为这样,能够初始化任务的"singleTask"和"singleInstance"模式,只能够用在那些拥有MAIN 和LAUNCHER 过滤器的activity中。想像一下如果没有这两个过滤器会发生什么:一个行为启动了"singleTask"模式的activity,启动了一个新的任务并且用户花了一些时间在这个任务上。然后用户按下了HOME键,这个任务被隐藏到了后台。因为没有在应用程序加载器上显示它,所以就没有办法返回到这个任务。
&& & & 一个类似的麻烦事 FLAG_ACTIVITY_NEW_TASK 标志。如果这个标志导致activity启动了一个新任务,并且用户按下HOME键离开了它,必须有一些方法将用户引导回它。一些实体(像是通知管理器) 总是在一个外部的任务中启动activity,而不作为它们的一部分,所以他们总是将带有FLAG_ACTIVITY_NEW_TASK 标记的行为对象传递到startActivity()&。如果你有一个可以被外部实体使用这个标签调用的activity,要注意用户应该有办法返回到启动的任务。
&& &对于那些你不想让用户返回到activity的情况,将&&activity&的finishOnTaskLaunch属性设置为&true&,参看前面的 清理栈 一节。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:712112次
积分:7684
积分:7684
排名:第1247名
原创:100篇
转载:177篇
评论:222条
(1)(2)(1)(1)(2)(2)(3)(1)(4)(1)(6)(12)(2)(1)(3)(5)(2)(1)(3)(5)(2)(1)(1)(1)(3)(9)(3)(10)(6)(11)(3)(3)(2)(1)(2)(9)(1)(5)(1)(4)(2)(1)(3)(7)(6)(4)(7)(2)(2)(13)(21)(16)(1)(7)(32)(18)(4)如何获得当前栈顶的Activity.
String getTopActivity(Activity context)
&&&&&ActivityManager
(ActivityManager)context.getSystemService(ACTIVITY_SERVICE)
runningTaskInfos = manager.getRunningTasks(1)
&&&&&if(runningTaskInfos
&&&&&&&return
(runningTaskInfos.get(0).topActivity).toString()
&&&&&&&return
AndroidManifest.xml
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。android开发中Activity和Task的关系-android100学习网
android开发中Activity和Task的关系
Android的每个Activity都运行在堆栈中,一个Task栈可以有多个Activity,同一个Activity也可以在不同的Task 栈中。栈顶的Activity是用户当前正在进行交互的Activity。用户不断返回的时候,栈顶的Activity会不断弹
Android的每个Activity都运行在堆栈中,一个Task栈可以有多个Activity,同一个Activity也可以在不同的Task 栈中。
栈顶的Activity是用户当前正在进行交互的Activity。用户不断返回的时候,栈顶的Activity会不断弹出直到用户回到桌面或者其他启动这个Activity的组件,那么这个Task就会销毁了。
Task是分前台和后台的。一般当用户启动一个新的Task或者按Home键回到桌面时,Task就会被转入后台。如果用户长时间离开某个 Task,这个Task只保留root Activity,其他的都会被销毁。
Activity的LaunchMode属性可以指定Activity和Task之间的关系。
& & & & & & android:launchMode=&standard&
& & & & & & android:launchMode=&singleTop&
& & & & & & android:launchMode=&singleTask&
& & & & & & android:launchMode=&singleInstance&
系统默认是standard的,即同一个Activity可以被实例化多次。
singleTop是指如果Task栈现在的顺序是A,B,C,D。那么如果现在传来一个intent是启动D的,那么D是会调用 onNewIntent来接受传来的intent,而不会重新启动D。所以Task栈的顺序还是A,B,C,D。
singleTask是指Activity只能实例化一次并且为它创建一个新的Task,如果Activity已存在其他Task中就执行 Activity的onNewIntent方法。当前Activity作为Task的root Activity,从root Activity启动的Activity会push进同一个Task中。
singleInstance是指Activity只能实例化一次并且独占一个Task。其他与singleTask一样。
除了可以在androidmanifest文件中定义Activity和Task的关系之外,在启动Activity时传入的Intent中也可以设置标识符来修改Activity的启动模式
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_NEW_TASK和singleTask对应
FLAG_ACTIVITY_SINGLE_TOP和singleTop对应
FLAG_ACTIVITY_CLEAR_TOP的话是指如果启动的Activity已存在,则将该Activity之上的Activity全部销毁掉。即栈A,B,C,D现在有传来intent启动Activity B,则C和D都将被finish掉,然后启动Activity B。如何改变Activity在当前任务堆栈中的顺序_百度知道
如何改变Activity在当前任务堆栈中的顺序
提问者采纳
没参与过 android 开发,但个人觉得操作系统应该不允许这样做。调整顺序应该是由人来使用了某个程序之后才自动调整而不是代码来调整,因为这个顺序是由操作系统控制是而且是”给人用的“而不是给机器用的。用程序来调整似乎是给机器用的。我们如果不希望某个 activity 用了之后挡在那儿,我们就在用完之后 finish 它让它结束生命周期。
来自团队:
其他类似问题
为您推荐:
堆栈的相关知识
其他1条回答
y在当前giopfui
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何改变Activity在当前任务堆栈中的顺序_百度知道
如何改变Activity在当前任务堆栈中的顺序
提问者采纳
本示例演示如何通过设置Intent对象的标记,来改变当前任务堆栈中既存的Activity的顺序。1. Intent对象的Activity启动标记说明:FLAG_ACTIVITY_BROUGHT_TO_FRONT:应用程序代码中通常不设置这个标记,而是由系统给单任务启动模式的Activity的设置。FLAG_ACTIVITY_CLEAR_TASK:如果给Intent对象添加了这个标记,那么在Activity被启动之前,会导致跟这个Activity关联的任何既存的任务都被清除。也就是说新的Activity会成为一个空任务的根,而其他任何Activity都会被销毁。它紧跟FLAG_ACTIVITY_NEW_TASK联合使用。FLAG_ACTIVITY_CLEAR_TOP:如果给Intent对象设置这个标记,并且要启动的Activity在当前任务中已经运行了,那么不是创建一个这个Activity的新的实例,而是把堆栈中这个Activity之上的所有其他Activity都关掉,然后把新的Intent对象发送给这个既存的Activity(这时它在堆栈的顶部)。FLAG_ACTIVITY_CLEAR_WHEN_TASK_REST:如果给Intent对象设置了这个标记,那么在这个任务被复位时,在任务的Activity堆栈中这个标记点之后的Activity都应该被清除。FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:如果给Intent对象设置了这个标记,那么新的Activity不会被保留在最近启动的Activity的列表中。FLAG_ACTIVITY_FORWARD_RESULT:如果给Intent对象设置了这个标记,并且这个Intent对象被用于从一个既存的Activity中启动一个新的Activity,然后将这个既存Activity的回复目标转移到新的Activity。使用这种方式获取的新的Activity能够调用setResult(int)方法,把结果返回给原始的Activity。FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY:这个标记通常不由应用程序代码来设置,如果是从历史中启动这个Activity,系统就会设置这个标记。FLAG_ACTIVITY_MULTIPLE_TASK:除非实现自己的顶层应用程序启动器,否则不使用这个标记。FLAG_ACTIVITY_NEW_TASK:如果给Intent对象设置了这个标记,在历史堆栈之上,这个Activity将成为一个新任务的起点。FLAG_ACTIVITY_NO_ANIMATION:如果给Intent对象设置了这个标记,那么将会阻止系统在Activity间切换的动画变换。FALG_ACTIVITY_NO_HISTORY:如果给Intent对象设置了这个标记,那么新的Activity将不会被保留在历史堆栈中。FLAG_ACTIVITY_NO_USER_ACTION:如果给Intent对象设置了这个标记,在新启动到前台的Activity被挂起之前,它会阻止普通的onUserLeaveHint()方法的回调。如果电话拨号或闹钟程序就要使用这个标记来启动Activity。FLAG_ACTIVITY_PREVIOUS_IS_TOP:如果给Intent对象设置了这个标记,并且这个Intent对象被用于从一个既存的Activity中启动一个新的Activity,这个Activity不能用于接受发送给顶层Activity的新的Intent对象,通常认为使用这个标记启动的Activity会被自己立即终止。FLAG_ACTIVITY_REORDER_TO_FRONT:如果给Intent对象设置了这个标记,那么将会导致任务历史堆栈中既存的Activity被带到前台。FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:如果给Intent对象设置了这个标记,并且这个Activity在一个新任务中被启动,也可以在既存的任务堆栈中被带到顶层,那么它就会被作为任务的前门来启动。FLAG_ACTIVITY_SINGLE_TOP:如果给Intent对象设置了这个标记,如果要启动的Activity已经在历史堆栈的顶层运行,那么这个Activity就不会被启动。FLAG_ACTIVITY_TASK_ON_HOME:如果给Intent对象设置了这个标记,那么它会导致新启动的任务被放到当前的主Activity任务之上。2. 示例代码2.1. 定义清单文件(AndroidManifest.xml)&?xml version=&1.0& encoding=&utf-8&?&&manifest xmlns:android=&&
package=&my.android.test&
android:versionCode=&1&
android:versionName=&1.0&&
&application android:icon=&@drawable/icon& android:label=&@string/app_name&&
&activity android:name=&.ReorderOnLaunch&
android:label=&@string/app_name&&
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
&activity android:name=&.ReorderTwo& /&
&activity android:name=&.ReorderThree& /&
&activity android:name=&.ReorderFour& /&
&/application&
&uses-sdk android:minSdkVersion=&9& /&\&/manifest&2.2. 定义字符串资源(strings.xml)&?xml version=&1.0& encoding=&utf-8&?&&resources&
&string name=&hello&&Hello World, ReorderOnLaunch!&/string&
&string name=&app_name&&ReorderOnLaunch&/string&
&string name=&reorder_on_launch&&This is the first of a sequence of four Activities.
A button on the fourth will use the Intent.FLAG_ACTIVITY_REORDER_TO_FRONT flag to bring the second of the activities to the front of the history stack. After that, proceeding back through the history should begin with the newly-frontmost second reorder activity, then the fourth, the third, and finally the first.&/string&
&string name=&reorder_launch_two&&Go to the second&/string&
&string name=&reorder_two_text&&This is the second in a sequence of four Activities.&/string&
&string name=&reorder_launch_three&&Go to the third&/string&
&string name=&reorder_three_text&&This is the third of a sequence of four Activities.&/string&
&string name=&reorder_launch_four&&Go to the fourth&/string&
&string name=&reorder_four_text&&This is the last in a sequence of four Activities.&/string&
&string name=&reorder_second_to_front&&Bring the second in front&/string&&/resources&2.3. 定义布局文件reorder_on_launch.xml&?xml version=&1.0& encoding=&utf-8&?&&LinearLayout xmlns:android=&&
android:orientation=&vertical&
android:padding=&4dip&
android:gravity=&center_horizontal&
android:layout_width=&match_parent&
android:layout_height=&match_parent&&
android:layout_width=&match_parent& android:layout_height=&wrap_content&
android:layout_weight=&0&
android:paddingBottom=&4dip&
android:text=&@string/reorder_on_launch&/&
&Button android:id=&@+id/reorder_launch_two&
android:layout_width=&wrap_content& android:layout_height=&wrap_content&
android:text=&@string/reorder_launch_two&&
&/Button&&/LinearLayout&reorder_two.xml&?xml version=&1.0& encoding=&utf-8&?&&LinearLayout xmlns:android=&&
android:orientation=&vertical&
android:padding=&4dip&
android:gravity=&center_horizontal&
android:layout_width=&match_parent&
android:layout_height=&match_parent&&
android:layout_width=&match_parent& android:layout_height=&wrap_content&
android:layout_weight=&0&
android:paddingBottom=&4dip&
android:text=&@string/reorder_two_text&/&
&Button android:id=&@+id/reorder_launch_three&
android:layout_width=&wrap_content& android:layout_height=&wrap_content&
android:text=&@string/reorder_launch_three&&
&/Button&&/LinearLayout&reorder_three.xml&?xml version=&1.0& encoding=&utf-8&?&&LinearLayout xmlns:android=&&
android:orientation=&vertical&
android:padding=&4dip&
android:gravity=&center_horizontal&
android:layout_width=&match_parent&
android:layout_height=&match_parent&&
android:layout_width=&match_parent& android:layout_height=&wrap_content&
android:layout_weight=&0&
android:paddingBottom=&4dip&
android:text=&@string/reorder_three_text&/&
&Button android:id=&@+id/reorder_launch_four&
android:layout_width=&wrap_content& android:layout_height=&wrap_content&
android:text=&@string/reorder_launch_four&&
&/Button&&/LinearLayout&reorder_four.xml&?xml version=&1.0& encoding=&utf-8&?&&LinearLayout xmlns:android=&&
android:orientation=&vertical&
android:padding=&4dip&
android:gravity=&center_horizontal&
android:layout_width=&match_parent&
android:layout_height=&match_parent&&
android:layout_width=&match_parent& android:layout_height=&wrap_content&
android:layout_weight=&0&
android:paddingBottom=&4dip&
android:text=&@string/reorder_four_text&/&
&Button android:id=&@+id/reorder_second_to_front&
android:layout_width=&wrap_content& android:layout_height=&wrap_content&
android:text=&@string/reorder_second_to_front&&
&/Button&&/LinearLayout& 2.4. 创建ActivityReorderOnLaunch.javapackage my.android. import android.app.Aimport android.content.Iimport android.os.Bimport android.view.Vimport android.view.View.OnClickLimport android.widget.B publicclass ReorderOnLaunch extends Activity {
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.reorder_on_launch);
Button twoButton = (Button)findViewById(R.id.reorder_launch_two);
twoButton.setOnClickListener(mClickListener);
privatefinal OnClickListener mClickListener = new OnClickListener(){
publicvoid onClick(View v){
startActivity(new Intent(ReorderOnLaunch.this, ReorderTwo.class));
};}ReorderTwo.javapackage my.android. import android.app.Aimport android.content.Iimport android.os.Bimport android.view.Vimport android.view.View.OnClickLimport android.widget.B publicclass ReorderTwo extends Activity {
protectedvoid onCreate(Bundle saveState){
super.onCreate(saveState);
setContentView(R.layout.reorder_two);
Button twoButton = (Button)findViewById(R.id.reorder_launch_three);
twoButton.setOnClickListener(mClickListener);
privatefinal OnClickListener mClickListener = new OnClickListener(){
publicvoid onClick(View v){
startActivity(new Intent(ReorderTwo.this, ReorderThree.class));
}; }ReorderThree.javapackage my.android. import android.app.Aimport android.content.Iimport android.os.Bimport android.view.Vimport android.view.View.OnClickLimport android.widget.B publicclass ReorderThree extends Activity {
privatefinal OnClickListener mClickListener = new OnClickListener(){
publicvoid onClick(View v){
startActivity(new Intent(ReorderThree.this, ReorderFour.class));
protectedvoid onCreate(Bundle saveState){
super.onCreate(saveState);
setContentView(R.layout.reorder_three);
Button twoButton = (Button)findViewById(R.id.reorder_launch_four);
twoButton.setOnClickListener(mClickListener);
}}ReorderFour.javapackage my.android. import android.app.Aimport android.content.Iimport android.os.Bimport android.view.Vimport android.view.View.OnClickLimport android.widget.B publicclass ReorderFour extends Activity {
protectedvoid onCreate(Bundle saveState){
super.onCreate(saveState);
setContentView(R.layout.reorder_four);
Button twoButton = (Button)findViewById(R.id.reorder_second_to_front);
twoButton.setOnClickListener(mClickListener);
privatefinal OnClickListener mClickListener = new OnClickListener(){
publicvoid onClick(View v){
Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
资深电脑人
其他类似问题
为您推荐:
堆栈的相关知识
其他1条回答
能改变顺序就不叫堆栈了
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 任务堆栈 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信