问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何改变Activity在当前任务堆栈中的顺序

发布网友 发布时间:2022-04-12 13:20

我来回答

2个回答

热心网友 时间:2022-04-12 14:50

本示例演示如何通过设置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="http://schemas.android.com/apk/res/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="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
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="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
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="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
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="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
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. 创建Activity
ReorderOnLaunch.java
package my.android.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

publicclass ReorderOnLaunch extends Activity {
@Override
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.java
package my.android.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

publicclass ReorderTwo extends Activity {
@Override
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.java
package my.android.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

publicclass ReorderThree extends Activity {

privatefinal OnClickListener mClickListener = new OnClickListener(){
publicvoid onClick(View v){
startActivity(new Intent(ReorderThree.this, ReorderFour.class));
}
};

@Override
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.java
package my.android.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

publicclass ReorderFour extends Activity {
@Override
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);
}
};
}

热心网友 时间:2022-04-12 16:08

能改变顺序就不叫堆栈了
如何改变Activity在当前任务堆栈中的顺序

如果给Intent对象设置这个标记,并且要启动的Activity在当前任务中已经运行了,那么不是创建一个这个Activity的新的实例,而是把堆栈中这个Activity之上的所有其他Activity都关掉,然后把新的Intent对象发送给这个既存的Activity(这时它在堆栈的顶部)。FLAG_ACTIVITY_CLEAR_WHEN_TASK_REST:如果给Intent对象设置了这个标记,那么在...

有没有清空activity堆栈底所有activity的方法

我现在采取了一个比较笨的方法是先启动activity堆栈最下面的activity并且带上参数intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);。然后再启动我想要的activity,并且finish掉当前最底端的activity

android 中怎样能够清除activity堆栈,也就是退出整个应用

如果退出整个程序,如下操作:方式一:Intent intent=new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);this.startActivity(intent);System.exit(0); 方式二:android.os.Process.killProcess(android.os.Process.myPid()); android...

理解任务和后台堆栈(活动四)

现在,任务A进入前台 - 其堆栈中的所有三个活动都完好无损,并且堆栈顶部的活动将恢复。此时,用户还可以通过返回主页并选择启动该任务的应用程序图标(或从“最近”屏幕中选择应用程序的任务)切换回任务B.这是Android上的多任务处理的一个示例。 图2.两个任务:任务B在前台接收用户交互,而任务A在后台,等待恢复。 图3...

有没有清空activity堆栈底所有activity的方法

你在你的application或者其他类里面新建一个activity的集合,每次打开一个activity就在onCreate中添加到这个集合中,关闭在onDestory中移除这个activity,需要是判断这个activity的list里面有没有数据

怎么获取当前运行的Activity

在Activity中,this就是当前的Activity,例如this.startActivity。在Fragment中可以通过 getActivity()来得到当前装载这个Fragment的Activity。通过Activity堆栈来获取当前显示的这个Activity ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);ComponentName cn = am.getRunningTasks(1).get(...

启动activity如何清除栈?

clearTaskOnLaunch属性 如果一个任务的根activity中此属性设置为“true”,则每当用户离开这个任务和返回它的时候,堆栈都会被清空至只留下rootactivity。换句话说,这是alwaysRetainTaskState的另一个极端。哪怕仅是过了一小会儿,用户回到任务时,也是见到它的初始状态。

不能通过finishAcitivity从当前activity关闭另一个activity吗

return activity; } /** * 结束当前Activity(堆栈中最后一个压入的) */ public void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 结束指定的Activity */ public void finishActivity(Activity act...

Activity的onNewIntent步骤何时会被调用

前提:ActivityA已经启动过,处于当前应用的Activity堆栈中;当ActivityA的LaunchMode为SingleTop时,如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法 当ActivityA的LaunchMode为SingleInstance,SingleTask时,如果已经ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法 当ActivityA的...

Activity-运行状态及生命周期

当 Activity 处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦 Activity 退出或关闭时,当前的数据和UI状态就丢失了。当系统内存需要被用在其他地方的时候,Stopped的 Activity 将被强行终止掉。Activity 被杀掉以后或者被启动以前,处于Killed状态。这是 Activity 已从Activity堆栈中移除,需要重新...

一个堆栈的入栈顺序 ucosii任务堆栈大小 freertos任务堆栈最大 freertos任务堆栈大小 vxworks任务堆栈只剩2字节 堆栈顺序 堆栈段进出顺序 任务堆栈 堆栈的定义
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...性(要求:器材,步骤,现象,结论)拜托了各位 谢谢 为什么新疆牧区行政区划存在大量分散特征,比如阿勒泰地区一个乡镇... 阿勒泰地区青河县以前的乡镇为什么分为一区和二区呢 阿勒泰历史沿革 hawk的讲解 取个英文名字,大家给点意见吧~ 尉蓝.威武的近义词有哪些.谁来帮我回答 机战里4格的九号核心能卖多少太阳?不是完美的~ 一份机战的市价表 我是高二生,想学词根词缀(方便记单词,另外,对英语感兴趣)有什么市面上... 光纤收发器不工作? 光纤收发器故障 光纤收发器有几个等不亮了,求帮忙给看下是什么原因,谢谢! 光纤收发器不通 ecs-2cs25光纤收发器一头fdx灯亮一头不亮是什么问题 光纤收发器的6个灯下面两个灯不亮怎么回事? tx fx 两端光纤收发器连上后,光口FX 100和 FX Link&#47;Act灯亮,但FDX灯不亮,网线口没有插。 光纤收发器有两个指示灯不亮如图 FX TX 。 。100 。 。LINK 。 。 FDX PWR 九江山水光纤收发器FDX灯不亮是什么原因 光纤收发器指示灯插入网线后FDX和100M亮一会,然后闪了几下就不亮了 vivo拨打电话无法访问移动网络手机打电话显示无法访问移动网络是... 王者荣耀夏侯惇乘风破浪皮肤多少点券 首周折扣是多少 王者荣耀6月30号之前用微视领马超皮肤是花71还是88? 交通银行企业手机银行怎么发电子版流水 怎样在屏幕上写心情oppoa59 OPPO手机有一个心情音乐,怎么放在桌面上? Apple Watch S5和小米手表(注意是手表)哪个比较好?或者说有什么... oppo手机如何让心情音乐显示在桌面上。 oppo Reno3手机抒写心情桌面怎么设置? oppo手机怎么抒写心情 求德莉莎和卡莲(崩坏学园2)这张图片原图高清 谁有这张图的高清原图啊,另外这是哪个动漫或者游戏里的人物? 有没有崩坏学园2八重凛的图片?最好是单人的,和八重樱一起的也行,不要瞎回答 求崩坏学园2的2张高清无水印图!! 求崩坏学园3高清图片 崩坏学园2普蕾提属性图片解析 求这种图的高清大图,出至崩坏学园2的CG图,问找不到了,谢谢 这张图是崩坏学园2的动画吗?是的话有链接或者资源没有? 求崩坏学园3游戏图标的原图。 谁可以给我一张崩坏学园2游戏图标的图片 谁有这张图。崩坏学园八重樱 把你所有崩坏学园2的人物图片给我,谢谢 求这两个图片出处 崩坏学园2落樱绘卷图片 求崩坏学园2战斗胜利后,那个天使的图片 国漫, 这个图片来自那个动漫 求《崩坏学园2》这张登录图片的高清版! 求崩坏学园2所有神格觉得装备的妹纸图片ㄟ(▔▽▔)ㄏ 崩坏学园2什么是up外 慕课堂小程序怎么注销账号