关于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
分享到:
相关推荐
Android activity intent 相关代码实例:activity的跳转 1.不带返回值的跳转 2.带返回值的跳转 intent的简单介绍。 Bundle的简单介绍。
在Android应用开发中,Activity是Android系统中的一个核心组件,它是用户界面的载体,而Intent则是连接各个Activity的桥梁,用于传递数据和启动其他组件。Intent不仅用于启动Activity,还能启动Service、...
在Android开发中,Activity是应用程序的基本组件,Intent则充当了Activity之间通信的桥梁。当我们需要在不同的Activity之间传递数据时,Intent就起到了至关重要的作用。本文将深入探讨如何使用Intent在Activity之间...
Intent不仅可以用来启动新的Activity,还可以在组件间传递数据。在这个场景中,我们关注的是如何在Activity之间通过Intent传递一个有序且可排序的Map集合。理解这个知识点对于优化应用的数据传输流程至关重要。 ...
【Android Intent 启动和关闭Activity】 在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity...
在Android操作系统中,Activity和Intent是两个至关重要的概念,它们构成了Android应用交互的核心。Activity可以理解为用户界面的“窗口”,而Intent则扮演着不同组件间通信的“信使”角色。在这里,我们将深入探讨这...
在Android应用开发中,Activity、Bundle、请求码与结果码、Intent、广播和服务是核心组件,它们构成了Android应用运行的基本框架。这篇博文将深入探讨这些概念及其相互关系,旨在帮助开发者更好地理解和运用。 首先...
Intent不仅可以用来启动新的Activity,还可以启动服务、广播接收器等。本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的Activity,拨打电话,以及在两个Activity之间传递参数。 首先,让我们讨论如何...
理解Activity的生命周期和Intent的传值机制对于Android开发者来说至关重要。 Activity的生命周期分为三个主要阶段:启动(Start)、运行(Running)和销毁(Destroy)。在启动过程中,Activity会经历onCreate()、...
在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它用于启动新的Activity或者服务,以及在组件间传递数据。Intent可以分为显式Intent和隐式Intent。本篇将重点讲解如何利用Intent在Android中调用Activity...
android Activity& android Intent详解, 入门级别
在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在Activity之间进行切换和数据传递。本文将详细讲解如何通过Intent实现Activity之间的切换,并探讨如何利用Intent进行数据传递。 ...
Intent singleInstanceIntent = new Intent(this, SingleInstanceActivity.class); singleInstanceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(singleInstanceIntent); // 启动SingleTask模式...
Intent主要用于启动新的Activity、Service,或者传递数据。在这个场景中,我们将关注Intent如何实现Activity之间的启动,以及如何结合Dialog的使用。 首先,Intent分为显式Intent和隐式Intent。显式Intent通过指定...
2. 创建一个PendingIntent,将目标Activity和Intent绑定,表示当广播被接收时,希望执行的动作。 3. 使用Context的sendBroadcast()方法发送广播。 接收广播的一方(接收者Activity): 1. 在AndroidManifest.xml中...
在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它被用来启动新的Activity或Service,也可以传递数据。本文将深入探讨如何在两个Activity之间通过Intent进行数据传递。 首先,理解Intent的基本概念。...
Intent activityIntent = new Intent(context, TargetActivity.class); activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(activityIntent); } } } ``` 3. **定义Provider**:`...
1. 显式Intent:在创建Intent时明确指定了要启动的目标组件(Activity或Service),通常在同一应用程序内使用。通过指定ComponentName(类名)来确定目标。 ```java Intent intent = new Intent(context, ...
当你启动一个新的Activity时,可以通过Intent的putExtra()方法添加键值对,然后在目标Activity中通过getIntent().getStringExtra(), getIntent().getIntExtra()等方法来获取这些数据。例如: ```java // 在发送...