`

Activity, Intent

阅读更多
关于Intent的FLAG_XXX
首先就是:FLAG_ACTIVITY_NEW_TASK,是否觉得当你在一个Intent上设置该flag后,你的Activity就会在新的Task上启动?
但实际上并没有(文档中是讲的零零散散,将各个部分拼起来就能够知道了),因为你的Activity总是在main task上启动,原因是你的Activity与main task有相同的taskAffinity,如果有task的taskAffinity与将启动的Activity相同,则那个task就会被bring front,同时将Activity放到那个task上。

还有NO_HISTORY和EXCLUDE_FROM_RECENTS也容易让人混淆:
NO_HISTORY:是说你一离开具有该标记的Activity,它会自动finish()(即使你没调用)

EXCLUDE_FROM_RECENTS:是针对task的root activity(一般就是作为launcher的那个Activity),如果你对它设了这个标记,在你长按home键时,就不会从Recents列表中看到该task了

FLAG_ACTIVITY_REORDER_TO_FRONT:将如果启动的Activity在task中已存在,则提取到最前面,否则启动新的放在最前面

launch a new activity from an existing one,这个不清楚应该是怎么理解,是不是利用task中已存在的Activity来创建出一个新的Activity(就是两个Activity的某些属性是一样的)

FLAG_ACTIVITY_FORWARD_RESULT:例如:有A->B->C->D,现在D以该属性startActivityForResult启动B,则现在为的task为A->B->C->D->B,因为B的setResult是返回给A的,所以最顶上的B将结果也返回给A,而不是D(不知道理解是否正确哦)

FLAG_ACTIVITY_PREVIOUS_IS_TOP:该属性应该是与其它属性组合起来用的,使用它是就是将前一个视为task的第一个,如:A->B->C->D,使用该属性时,C被认为是第一个,而无视D


还有很多其它的控制Activity和Task的属性:
<activity>标签有:
android:launchMode
android:taskAffinity
android:clearTaskOnLaunch
android:alwaysRestainTaskState
android:allowTaskReparenting
android:excludeFromRecents
android:finishOnTaskLaunch
android:noHistory


涉及的文档:
docs/reference/android/content/Intent.html
docs/guide/topics/manifest/application-element.html
docs/guide/topics/manifest/activity-element.html
docs/guide/topics/fundamentals/tasks-and-back-stack.html
docs/guide/topics/fundamentals.html#acttask


关于activity的内存泄漏
public class MyActivity extends BaseActivity {
	// some code

	// 非static的线程类
	private class MyTask extends AsyncTask<Void, Void, Void> {
		@Override
		protected void onPreExecute() {
		}
		
		@Override
		protected Void doInBackground(Void... params) {
			try {
				Thread.sleep(10000000);
			} catch (InterruptedException ex) {
			}
			return null;
		}
		
		@Override
		protected void onPostExecute(Void result) {
		}
	}
}

如果此时,因为屏幕切换而导致Activity重新常见,那么就会造成内存泄漏了。因为MyTask 引用着 MyActivity,而MyTask一直没有结束。如果多次屏幕切换的话,泄漏的内存就不可小觑了。
  • 大小: 6.1 KB
分享到:
评论
3 楼 ChoiRyonggun 2012-05-16  
yuanzhifei89 写道
ChoiRyonggun 写道
  哥们 你的 FLAG_ACTIVITY_FORWARD_RESULT 错了, 让我 搞了4个小时才明白到底是怎么回事.....感觉很不值...  

因为文档写的很含糊,当时这个也没有很理解!后面我也写了的(不知道理解是否正确)。不知道该如何理解这个?



首先 A startActivityForResult(B) -->  ,
有时我们需要在C里处理结果

不用FLAG_ACTIVITY_FORWARD_RESULT的话
A startActivityForResult(B) --> B startActivityForResult(C) 最总返回给A ,

使用FLAG_ACTIVITY_FORWARD_RESULT后
A startActivityForResult(B) -- > B再用 FLAG_ACTIVITY_FORWARD_RESULT 启动 C
这时在C里调用的 setResult == B.setResult (完全覆盖了B.setResult,我是这么理解的)

具体跑一边吧.
2 楼 yuanzhifei89 2012-05-15  
ChoiRyonggun 写道
  哥们 你的 FLAG_ACTIVITY_FORWARD_RESULT 错了, 让我 搞了4个小时才明白到底是怎么回事.....感觉很不值...  

因为文档写的很含糊,当时这个也没有很理解!后面我也写了的(不知道理解是否正确)。不知道该如何理解这个?
1 楼 ChoiRyonggun 2012-05-15  
  哥们 你的 FLAG_ACTIVITY_FORWARD_RESULT 错了, 让我 搞了4个小时才明白到底是怎么回事.....感觉很不值...  

相关推荐

    Android activity intent 相关代码实例.rar

    Android activity intent 相关代码实例:activity的跳转  1.不带返回值的跳转  2.带返回值的跳转    intent的简单介绍。  Bundle的简单介绍。

    Android activity intent 相关Java源代码

    在Android应用开发中,Activity是Android系统中的一个核心组件,它是用户界面的载体,而Intent则是连接各个Activity的桥梁,用于传递数据和启动其他组件。Intent不仅用于启动Activity,还能启动Service、...

    android activityIntent 传值 传对象

    在Android开发中,Activity是应用程序的基本组件,Intent则充当了Activity之间通信的桥梁。当我们需要在不同的Activity之间传递数据时,Intent就起到了至关重要的作用。本文将深入探讨如何使用Intent在Activity之间...

    Activity 间intent传递有序排序的map集合

    Intent不仅可以用来启动新的Activity,还可以在组件间传递数据。在这个场景中,我们关注的是如何在Activity之间通过Intent传递一个有序且可排序的Map集合。理解这个知识点对于优化应用的数据传输流程至关重要。 ...

    Android利用Intent启动和关闭Activity

    【Android Intent 启动和关闭Activity】 在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity...

    android中Activity和Intent的关系

    在Android操作系统中,Activity和Intent是两个至关重要的概念,它们构成了Android应用交互的核心。Activity可以理解为用户界面的“窗口”,而Intent则扮演着不同组件间通信的“信使”角色。在这里,我们将深入探讨这...

    Activity、Bundle、请求码与结果码、Intent、广播、服务 (二)

    在Android应用开发中,Activity、Bundle、请求码与结果码、Intent、广播和服务是核心组件,它们构成了Android应用运行的基本框架。这篇博文将深入探讨这些概念及其相互关系,旨在帮助开发者更好地理解和运用。 首先...

    Android应用:Intent打开另外一个Activity,Intent拨电话,Intent在2个Activity间传递参数

    Intent不仅可以用来启动新的Activity,还可以启动服务、广播接收器等。本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的Activity,拨打电话,以及在两个Activity之间传递参数。 首先,让我们讨论如何...

    Activity生命周期及Intent传值

    理解Activity的生命周期和Intent的传值机制对于Android开发者来说至关重要。 Activity的生命周期分为三个主要阶段:启动(Start)、运行(Running)和销毁(Destroy)。在启动过程中,Activity会经历onCreate()、...

    android 利用intent调用activity 简明精炼的例子

    在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它用于启动新的Activity或者服务,以及在组件间传递数据。Intent可以分为显式Intent和隐式Intent。本篇将重点讲解如何利用Intent在Android中调用Activity...

    Activity&Intent详解.pptx

    android Activity& android Intent详解, 入门级别

    通过Intent实现Activity之间的切换,并传递数据

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在Activity之间进行切换和数据传递。本文将详细讲解如何通过Intent实现Activity之间的切换,并探讨如何利用Intent进行数据传递。 ...

    Activity四种启动模式

    Intent singleInstanceIntent = new Intent(this, SingleInstanceActivity.class); singleInstanceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(singleInstanceIntent); // 启动SingleTask模式...

    intent实现Activity之间的启动

    Intent主要用于启动新的Activity、Service,或者传递数据。在这个场景中,我们将关注Intent如何实现Activity之间的启动,以及如何结合Dialog的使用。 首先,Intent分为显式Intent和隐式Intent。显式Intent通过指定...

    activity更新另一个activityUI方法——广播

    2. 创建一个PendingIntent,将目标Activity和Intent绑定,表示当广播被接收时,希望执行的动作。 3. 使用Context的sendBroadcast()方法发送广播。 接收广播的一方(接收者Activity): 1. 在AndroidManifest.xml中...

    Android开发 两个Activity之间通过Intent跳转传值

    在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它被用来启动新的Activity或Service,也可以传递数据。本文将深入探讨如何在两个Activity之间通过Intent进行数据传递。 首先,理解Intent的基本概念。...

    appWidget启动Activity

    Intent activityIntent = new Intent(context, TargetActivity.class); activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(activityIntent); } } } ``` 3. **定义Provider**:`...

    android ,跳转到代码(intent)

    1. 显式Intent:在创建Intent时明确指定了要启动的目标组件(Activity或Service),通常在同一应用程序内使用。通过指定ComponentName(类名)来确定目标。 ```java Intent intent = new Intent(context, ...

    AndroidStudio简单实现单击Widget打开Activity

    Intent activityIntent = new Intent(context, WidgetActivity.class); activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(activityIntent); } } } ``` 最后,为了使Widget能在...

Global site tag (gtag.js) - Google Analytics