[单选] FLAG_ACTIVITY_CLEAR_TOP标记的作用是什么?(C)

A 。 如果Activity已经在任何栈中启动,则不做任何操作

B 。 如果Activity已经在当前栈中启动,则不做任何操作

C 。 如果Activity已经在当前栈中启动,则所有在该Activity之上的Activity都会被销毁

D 。 如果Activity已经在任何栈中启动,则所有在该Activity之上的Activity都会被销毁
答案是C

使用FLAG_ACTIVITY_CLEAR_TOP退出整个应用程序:

多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序。

补充:finish()和system(0)都只能退出单个activity。

 

我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Intent。FLAG_ACTIVITY_CLEAR_TOP,再次开启A时将会清除该进程空间的所有Activity。flag_activity_clear_top标记作用

在D中使用下面的代码:

  Intent intent = new  Intent();

 intent。setClass(D。 this , A。 class );

 intent。setFlags(Intent。FLAG_ACTIVITY_CLEAR_TOP);  //注意

  startActivity(intent);//启动A Activity

  finish(); //kill掉自己 

-------------------------

  在A中加入代码: 

//Override   

protected  void  onNewIntent(Intent intent) {   

// TODO Auto-generated method stub   

super 。onNewIntent(intent);   

//退出   

   if  ((Intent。FLAG_ACTIVITY_CLEAR_TOP & intent。getFlags()) != 0 ) { 

                finish();   

        }   

}flag_activity_clear_top标记作用

------------------------------------

A的Manifest。xml配置成android:launchMode="singleTop" 

说明:

一般A是程序的入口点,从D起一个A的activity,加入标识Intent。FLAG_ACTIVITY_CLEAR_TOP这个过程中会把栈中B,C,都清理掉。因为A是android:launchMode="singleTop"

不会调用oncreate(),而是响应onNewIntent()这时候判断Intent。FLAG_ACTIVITY_CLEAR_TOP,然后把Afinish掉。 栈中A,B,C,D全部被清理。所以整个程序退出了。 

补充:

1。可以把A设置成不可见的Acitivity:

AndroidManifest。xml中设置:

android:theme=”@android:style/Theme。NoDisplay” 

 

然后在它的onCreate方法里跳转到“真正”的载入界面就可以实现在D中点退出程序按钮时看上去立即退出程序的效果

2。A必须是程序启动的第一个Activity才能起到这种立即退出的效果,因为Intent。FLAG_ACTIVITY_CLEAR_TOP只会把目标Activity的“上面”的Activity清理掉,而如果目标Activity的“下面”还有Activity(换句话说,目标Activity不在栈底),则finish后只会到他下面的那个Activity,而不是立即退出的效果了


上一篇:定时器中断是干嘛的?
下一篇:vagaa不能用了,现在vagaa还能用吗?

<activity-alias>标签详解和使用

股票个别风险和预期收益率的关系

浅谈地质灾害及其分布规律【2498字】

陶渊明赠答诗与嵇康赠答诗文献综述

磁流变液可控阻尼离合器的设计+CAD图纸

小學生语文學习兴趣的激发与培养【2255字】

關于民办高校人才队伍建...

浅谈全球价值链视角下传...

学院教职工体育活动现状调查问卷表

crm成功案例分析crm成功案例

17岁學生怎么兼职赚钱,...