activity启动模式应用,如FLAG_ACTIVITY_CLEAR_TOP
来源:互联网 发布:web前端性能优化方案 编辑:程序博客网 时间:2024/06/16 20:23
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 { @Override protected 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代码如下:
- package com.scott.launchmode;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- public class FirstActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.first);
- TextView textView = (TextView) findViewById(R.id.textView);
- textView.setText(this.toString());
- Button button = (Button) findViewById(R.id.button);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
- startActivity(intent);
- }
- });
- }
- }
然后我们连续点击几次按钮,将会出现下面的现象:
我们注意到都是FirstActivity的实例,但序列号不同,并且我们需要连续按后退键两次,才能回到第一个FristActivity。standard模式的原理如下图所示:
如图所示,每次跳转系统都会在task中生成一个新的FirstActivity实例,并且放于栈结构的顶部,当我们按下后退键时,才能看到原来的FirstActivity实例。
这就是standard启动模式,不管有没有已存在的实例,都生成新的实例。
其他模式都会调用onnewintent方法
- activity启动模式应用,如FLAG_ACTIVITY_CLEAR_TOP
- Activity启动模式intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- Activity的启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- Activity的启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- Activity的启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- Activity的启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- Android 启动模式之 FLAG_ACTIVITY_CLEAR_TOP
- Activity应用及启动模式
- activity启动模式应用场景
- intent 启动模式(FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT)
- Activity的启动模式及应用实例
- Activity四种启动模式及应用
- Activity的启动模式及应用场景
- Activity启动模式(基于应用场景分析)
- Android activity 启动模式应用场景
- android activity启动模式(介绍、图解、应用)
- c#中文件简单的读
- 看Struts2技术内幕,对于书中提出的问题,参考其他前辈的文章所写
- Word中实现固定长度的数字自动编号
- JS笔记整理(一)
- 打扑克和插入排序
- activity启动模式应用,如FLAG_ACTIVITY_CLEAR_TOP
- 从Eclipse导入web项目,然后在另一个电脑上的Eclipse导入web项目后报错
- 备注词条:潜在语义分析(lsa)
- Ambari之stack介绍
- C语言基础——extern 与 static
- Eclipse下Nodejs项目配置步骤 .
- 记录一下python easy_install和pip安装地址和方法
- CMIS的规范及其委员会成员
- Android建立GPRS通信的流程