1

Android 开发者指南指出活动是通过 Intents 启动的:

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

对于 Fragments,通常在屏幕上显示的方式如下:

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

为什么在一种情况下我必须指定一个类,而在另一种情况下我必须指定一个对象?即,我想使用类似的东西

Activity nextActivity = new SignInActivity();
Intent intent = new Intent(this, nextActivity);
startActivity(intent);
4

3 回答 3

2

因为Activity生命周期由 Android 管理,而Fragment生命周期与包含它的 Activity 相关联。

如前所述,Activity生命周期由 Android 管理。这是 Android 管理系统资源和处理后台堆栈所必需的。

Fragment另一方面,它的引入是为了模块化和更好地组织不同尺寸设备的 UI。根据文档:

从 HONEYCOMB 开始,Activity实现可以利用 Fragment该类更好地模块化他们的代码,为大屏幕构建更复杂的用户界面,并帮助在小屏幕和大屏幕之间扩展他们的应用程序。

要回答问题的后半部分,您确实可以将活动的结果传递给第二个活动。但是你永远不应该为此创建一个Activity类的实例。正确的方法是使用startActivityForResult()并通过 将结果值发送到目标活动Intent

于 2013-06-10T07:02:14.307 回答
0

Android 自己处理 Activity 生命周期。看看 Activity 类的方法,它们就像填空题一样。Android在这里发号施令。通过这些方法,它只是询问是否想在此活动创建、恢复、暂停等时执行某些操作。

Android内部处理Activity生命周期的原因有很多:

  1. 正确设置 Activity 涉及大量样板代码,最好让系统为您完成。整个Contextwindow management在幕后为您设置。想象一下,如果您必须为您创建的每个活动都做额外的工作量。

  2. 活动是共享的,主屏幕和其他应用程序可能想要启动/使用它们。new MyActivity()如果他们不得不调用一些不起眼的包裹,这怎么可能?. 这就是为什么必须在应用程序清单中声明活动和其他外部可调用组件的原因。

  3. 许多应用程序的活动可以是 android任务的一部分(从用户的角度来看是一项工作)。并自动放置/移除/重新排列在后堆栈上。同样,它更好的 Android 管理他们的创建和销毁,而不是开发人员搞乱整个设置。

  4. 所有用户关心的是 Activity 必须在被要求时出现,并且如果用户导航到其他地方就让开。Android 强制执行此操作。仅仅因为允许以这种方式对其进行编程,就使 Activity 自行出现或拒绝消失,这是不可接受的。

另一方面,现在 Fragments 是内部的。它们存在Activity 中,不会以任何方式从外部应用程序或任务中访问或共享。片段甚至不是应用程序清单的一部分,因此不会暴露在外面。Android 无需单独关心每个 Fragment,因为 Fragment 的生命周期与其父 Activity 的生命周期绑定在一起。Android 不关心你在内部对 Fragment 做了什么,它可以结束 Activity 并且其中的所有内容也都被销毁。

于 2013-06-10T07:32:46.633 回答
0

在添加片段时,您已经指定了将该片段插入的确切位置。所以,理想的方法是,

  1. 创建你的片段。
  2. 插入当前活动的布局。
  3. 使用事务来删除/管理您的片段,添加到当前活动中。

在任何情况下,您都不能只启动或使用一个片段,而不将其附加到现有活动中。

于 2013-06-10T07:01:40.147 回答