当前位置: 首页 > article >正文

activity启动模式应用,如FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_CLEAR_TOP :如果设置,并且要启动的activity已经在当前的任务中,那么在该activity之上的activity都会关闭,并且intent会传递给老的activity(现在在栈顶)
例如,假设一个任务包含四个activity:A,B,C,D,假设D中启动B并且带有次标志,则 C和D都会结束,并且B会收到intet,现在的栈变成了A,B

在上面的例子中,当前运行的B要么在他的onNewIntent方法中接受这个Intent,或者结束掉已经存在的实例并且重启一个,这依赖与B的启动模式,如果是确实的"multiple(即standard)",那么结束掉实例并重启一个,其他启动模式下将会调用他的onNewIntent

如下代码:

MainActivity:
<pre name="code" class="java">package com.example.activitymode;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "MainActivity", Toast.LENGTH_LONG).show();new Handler().postDelayed(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubIntent mainIntent = new Intent(MainActivity.this,SecondActivity.class);MainActivity.this.startActivity(mainIntent);//个人理解:这句话是为了使<pre name="code" class="java" style="font-size: 13px; line-height: 24.0499992370605px;">SecondActivity在栈顶,以便使用launch触发<span style="line-height: 24.0499992370605px; font-family: 'Microsoft YaHei', 微软雅黑, Arial, 'Lucida Grande', Tahoma, sans-serif;">FLAG_ACTIVITY_CLEAR_TOP参数。如果没有这句话,直接触发。在栈顶是只有mainActivity,而没有secondActivity,是没有效果的。原因看上文解释</span>
SecondActivity.launch(MainActivity.this);//这句触发 FLAG_ACTIVITY_CLEAR_TOP,使用栈顶的secondactivity。
MainActivity.this.finish();}}, 2000);}}, 2000); }}

 

SecondActivity:
 
<pre name="code" class="java">package com.example.activitymode;import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;public class SecondActivity extends Activity {public static void launch(Context c){Intent intent = new Intent(c,SecondActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);c.startActivity(intent);Log.d("launch", "launch");}@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toast.makeText(SecondActivity.this, "SecondActivity.onCreate", Toast.LENGTH_LONG).show();;}}
不过以上实验是在activity的启动模式属于 standard
 

1.standard

standard模式是默认的启动模式,不用为<activity>配置android:launchMode属性即可,当然也可以指定值为standard。

我们将会一个Activity,命名为FirstActivity,来演示一下标准的启动模式。FirstActivity代码如下:

[java]  view plain copy
  1. package com.scott.launchmode;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.widget.Button;  
  8. import android.widget.TextView;  
  9.   
  10. public class FirstActivity extends Activity {  
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.first);  
  15.         TextView textView = (TextView) findViewById(R.id.textView);  
  16.         textView.setText(this.toString());  
  17.         Button button = (Button) findViewById(R.id.button);  
  18.         button.setOnClickListener(new View.OnClickListener() {  
  19.             @Override  
  20.             public void onClick(View v) {  
  21.                 Intent intent = new Intent(FirstActivity.this, FirstActivity.class);  
  22.                 startActivity(intent);  
  23.             }  
  24.         });  
  25.     }  
  26. }  
我们FirstActivity界面中的TextView用于显示当前Activity实例的序列号,Button用于跳转到下一个FirstActivity界面。

然后我们连续点击几次按钮,将会出现下面的现象:

我们注意到都是FirstActivity的实例,但序列号不同,并且我们需要连续按后退键两次,才能回到第一个FristActivity。standard模式的原理如下图所示:


如图所示,每次跳转系统都会在task中生成一个新的FirstActivity实例,并且放于栈结构的顶部,当我们按下后退键时,才能看到原来的FirstActivity实例。

这就是standard启动模式,不管有没有已存在的实例,都生成新的实例。


其他模式都会调用onnewintent方法
http://www.lryc.cn/news/2417427.html

相关文章:

  • 分支语句——switch-case
  • 毕业论文中的图表目录
  • 单片机定时器中断(之中断概念)
  • 使用nlite制作集成驱动windows安装光盘及实践心得
  • 关于sqlserver中SqlParameter的用法注意事项
  • ccbp 知识点
  • 服务器出现大量 TIME_WAIT,如何解决
  • JavaSE:实现象棋游戏
  • 古典密码(部分合集)
  • VC6.0常见错误之::Debug Assertion Failed!
  • C#使用FileSystemWatcher来监控指定文件夹,并使用TCP/IP协议通过Socket发送到另外指定文件夹
  • 虚拟机Linux IP地址更改
  • 13 | 如何为团队设定合理的目标呢?
  • input标签 各属性解释
  • 热插拔机制之udev和mdev
  • MFC教程(Visual C++ 6.0)|合集 |更新中
  • bluetooth 外围设备 驱动有问题 解决办法
  • java中Date/Time/Timestamp对应sql
  • 数据库之 MongoDB and SQLite
  • img文件制作linux启动u盘,制作Linux的U盘启动盘
  • Python后端---使用Django+Mysql搭建一个简单的网站
  • 1.4种权限控制
  • Oracle INSERT INTO的几种用法
  • 效率工具:分享7款实用的任务管理软件,值得收藏!
  • d3dx9_25.dll文件丢失的解决方法
  • 【系统分析与设计】UML协作图绘制方法(真の能看懂~!)
  • Linux export 命令用法
  • 【数理逻辑】范式 ( 合取范式 | 析取范式 | 大项 | 小项 | 极大项 | 极小项 | 主合取范式 | 主析取范式 | 等值演算方法求主析/合取范式 | 真值表法求主析/合取范式 )
  • ant man什么意思_ant是什么意思_ant的翻译_音标_读音_用法_例句_爱词霸在线词典...
  • WinRunner使用经验介绍