06 intent flag三种属性
flag属性可以看做和写在清单文件中的启动模式一样 但效果有一定差别
1,FLAG_ACTIVITY_SINGLE_TOP:启动模式里的SingleTop一致 如果X启动模式设置为FLAG_ACTIVITY_SINGLE_TOP如果不在栈顶则创建一个X实例 如果在不创建。
2,FLAG_ACTIVITY__CLEAR_TOP:类似singleTask 不同之处:不管在不在此在栈顶都会删除自身然后重新创建一个新的Activity 所以叫CLEAR_TASK 具体: 首先将上方的Activity pop出 将自身的Activity销毁 重新创建一个Activity 在栈顶
>如果当前Activity存在 在栈顶 将将自身的Activity销毁 重新创建一个Activity
3,FLAG_ACTIVITY_NEW_TASK
>1,不在清单文件中设置 和默认启动模式是一致的
>2,在清单文件中设置属性
android:taskAffinity="aa.bb"
android:allowTaskReparenting="true"
taskAffinity用于指定当前Activity(activity1)所关联的Task,
allowTaskReparenting用于配置是否允许该activity可以更换从属task
例子:第一个界面代码:
package com.qf.day06_intentflag; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View; public class MainActivity extends Activity { private static final String TAG ="MainActivity"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Log.e(TAG, "===id==>"+this.getTaskId()+"==onCreate=="+this.hashCode());
} @Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
Log.e(TAG, "===id==>"+this.getTaskId()+"==onNewIntent=="+this.hashCode());
} @Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e(TAG, "===id==>"+this.getTaskId()+"==onDestroy=="+this.hashCode());
} public void Onclick(View v){
switch (v.getId()) {
case R.id.btn01:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//设置标记(启动模式)
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent); break;
case R.id.btn02:
Intent intent1 = new Intent(MainActivity.this, ThreeActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent1); break;
case R.id.btn03: Intent intent2 = new Intent(MainActivity.this, FourActivity.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent2);
break; default:
break;
}
} }
第一个对应界面:
第四个个界面代码:
package com.qf.day06_intentflag; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View; public class FourActivity extends Activity{ private static final String TAG ="FourActivity"; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout3);
Log.e(TAG, "===id==>"+this.getTaskId()+"==onCreate=="+this.hashCode());
} @Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
Log.e(TAG, "===id==>"+this.getTaskId()+"==onNewIntent=="+this.hashCode());
} @Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e(TAG, "===id==>"+this.getTaskId()+"==onDestroy=="+this.hashCode());
} public void onMyClick(View v){ switch (v.getId()) {
case R.id.btnMain:
Intent intent1 = new Intent(FourActivity.this, MainActivity.class);
startActivity(intent1);
break;
case R.id.btnFour:
Intent intent2 = new Intent(FourActivity.this, FourActivity.class); startActivity(intent2); break; default:
break;
} } }
第四个对应界面:
清单文件::
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.qf.day06_intentflag"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.qf.day06_intentflag.MainActivity"
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=".SecondActivity"></activity>
<activity android:name=".ThreeActivity"></activity>
<activity
android:label="第四个"
android:name=".FourActivity"
android:taskAffinity="aa.bb"
android:allowTaskReparenting="true"
></activity>
</application> </manifest></span>
我们进入第一个界面的时候
我们点击 FLAG_ACTIVITY_NEW_TASK
发现重新创建了一个栈: 这是我们再点机跳转到MainActivity
发现新生成的MainActivity在新的栈区中
我们打开后台窗口看看:
发现有两个进程,可以用此方法方便用户选择一个后台界面同时处理两件事。
我们继续在第四个Activity 的界面上
我们点击继续点击FLAG_ACTIVITY_NEW_TASK 看看
可见在一个FourActivity ---》》FLAG_ACTIVITY_NEW_TASK生成的心亲和栈区中 无法再生成一个FourActivity ---》》FLAG_ACTIVITY_NEW_TASK心的亲和栈区(这里只影响FourActivity
在生产亲和栈区 但不影响 其他 Activity生成亲和栈区 比如说在这里再生一个界面的的亲和栈区 )
注意FLAG_ACTIVITY_NEW_TASK 必须配合 android:taskAffinity
android:allowTaskReparenting="true"使用。
****************************************************************************
在这里我们假设 MainActivity设置以下属性()
即与FourActivity ---》》FLAG_ACTIVITY_NEW_TASK生成的亲和区是一样的话
那么生成的亲和区还是在MainActivity的 栈中后台只有一个程序
>>>>>>>>>>>> 在这里我们假设一种情况<<<<<<<<<<<<<<<<<<<<<<<<<
A(一个Activiry)在清单中设置了亲和栈=“AA.AA” B(一个Activiry)在清单中设置了亲和栈为=“BB.BB”
A此时跳转到B 但intent flag不设置任务启动模式 那么他们依然在一个栈
如果C(一个Activiry)设为亲和栈为=“AA.AA”
因为B会依然跟随A所以 ABC三个在一个栈区中
如果我们设置C=“BB.BB”
那么AB依然在一起 只不过C在另一个栈区中后台可以看见两个
****************************************************************************
我们在82栈区按下返回键
我们点击 “跳转到FourActivity” 自己跳转 但没有设置intent的flag属性 发现可以无限生成 可见他不影响 。
************在82栈区界面再点击mainActivity******************
*********在后台选择界面返回81栈区界面*************
然后再81栈区点击FLAG_ACTIVITY_NEW_TASK
此居然返回到了82栈区当前界面(注意返回到的不是FourActivity界面 而是FourActivity生成亲和栈区栈顶的界面)
06 intent flag三种属性的更多相关文章
- Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明
Lifecycle 三种属性: Session.Invocation.Server 这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明. 如果乱用这三种属性,你的服务程序有可 ...
- Spark学习笔记-三种属性配置详细说明【转】
相关资料:Spark属性配置 http://www.cnblogs.com/chengxin1982/p/4023111.html 本文出处:转载自过往记忆(http://www.iteblog.c ...
- DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明
From http://blog.csdn.net/sunstone/article/details/5282666 DataSnap高级技术(7)—TDSServerClass中Lifecycle生 ...
- javaScript数组的三种属性—数组索引、数组内置属性、数组自定义属性
JS数组也是一种对象. 我们用JavaScript处理的所有东西,都可以视为是一种对象. JavaScript中有两种数据类型,基本类型数对象类型,但是基本类型基本都是包括在对象类型之中的. 数组.函 ...
- Hibernate-ORM:06.Hibernate中三种状态
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态 commit和flu ...
- day 06云计算的三种服务模式:IaaS,PaaS和SaaS
云计算的三种服务模式:IaaS,PaaS和SaaS ”云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道. “云”其实是互联 ...
- 广播Intent的三种方式总结
1.android有序广播和无序广播的区别 BroadcastReceiver所对应的广播分两类:普通广播和有序广播. 普通广播通过Context.sendBroadcast()方法来发送.它是完全异 ...
- python中类的三种属性
python中的类有三种属性:字段.方法.特性 字段又分为动态字段和静态字段 类 class Province: #静态字段 memo = 'listen' #动态字段 def __init__(se ...
- position三种属性的区别
1.static(静态定位):默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明). 2.relative(相对定位):生成相对 ...
随机推荐
- 笔记5 bean的作用域
1. Spring定义了多种作用域,可以基于这些作用域创建bean,包括: 单例(Singleton):在整个应用中,只创建bean的一个实例.(默认) 原型(Prototype):每次注入或者通过S ...
- 非Unicode编码的软件如何在Windows系统上运行
我们常常会遇到这样一种情况:点开某些日文软件(我不会说就是galgame( ╯□╰ ))会出现乱码或者直接无法运行. 出现乱码的原因很简单:编码与译码的方式不一致!!!!!!!!!!! 首先大家需要知 ...
- python中不能写n++
初学python发现写n++编译器直接报错,很纳闷,后来想起来python中的变量不像c那样事先定义好变量类型,在内存中开辟指定的空间,然后再开始赋值.在Python中,以字符串为例:事先在内存划分空 ...
- 缓冲区(buffer)与缓存(cache)
下面介绍缓冲区的知识. 一.什么是缓冲区 缓冲区(buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区, ...
- 两个App之间调起通信
前言 经常使用一些app的分享功能,比如点击QQ分享,就从app打开(跳转到)QQ,然后分享完之后又回到我们的app,那么这是怎样实现的呢? 假设有这么一个需求,由app1跳转到app2,当app2完 ...
- sqlserver 查询 inner join 同一表2次 只出一条查询结果
inner join T_MTN_MobileNumber k on 1=1 and k.hddm='01' inner join (select a.hdxx+','+b.hdxx as hdxx ...
- 基于PHP的快递查询免费开放平台案例-快宝开放平台
快递查询是快递业务中极其重要的业务,免费的快递查询开放平台:快宝开放平台. 快宝开放平台:http://open.kuaidihelp.com/home,已经对接100多家快递公司,实现快递物流信息实 ...
- 18. 4Sum(中等)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- 如何搭建samba服务?
为了日后便于查询,本文所涉及到的所有命令集合如下: chkconfig iptables off #关闭防火墙命令 在Centos7中使用的是chkconfig firewalld off seten ...
- ABP文档笔记 - 数据过滤
预定义的过滤 ISoftDelete 软删除过滤用来在查询数据库时,自动过滤(从结果中抽取)已删除的实体.如果一个实体可以被软删除,它必须实现ISoftDelete接口,该接口只定义了一个IsDele ...