为什么我不能通过参考启动活动?

时间:2013-06-10 06:31:24

标签: android android-fragments android-activity android-lifecycle

Android开发人员指南指出,活动是通过Intents启动的:

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

对于碎片,在屏幕上显示它的常用方法如下:

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);

3 个答案:

答案 0 :(得分:2)

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

如上所述,Activity生命周期由Android管理。除其他外,这是Android管理系统资源以及处理后台堆栈所必需的。

另一方面,

Fragment被引入以模块化并更好地组织具有不同大小的设备的UI。根据文件:

  

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

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

答案 1 :(得分:0)

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

  1. 创建您的片段。
  2. 插入当前活动的布局。
  3. 使用事务删除/管理您的片段,添加到当前活动中。
  4. 绝不可以启动或仅使用片段,而无需将其附加到现有活动。

答案 2 :(得分:0)

Android自行处理Activity生命周期。只要看一下Activity类的方法,就像填充空白一样。 Android在这里做主。通过这些方法,只需要在创建,恢复,暂停等活动时询问是否

内部Android处理活动生命周期的原因很多:

  1. 正确设置一个活动涉及大量的锅炉板代码,更好的让系统为您做。在幕后为您设置了整个Contextwindow management。想象一下额外的工作量,如果你必须为你创建的每个活动做这件事。

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

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

  4. 所有用户关心的是,当被要求时,活动必须显示,并且如果用户在其他地方导航,则只是放弃。 Android强制执行此操作。让一个活动独立出现,或拒绝离开,仅仅因为它允许以这种方式编程,是不可接受的。

  5. 现在碎片是内部的。它们在内部活动中生存,不以任何方式从外部应用程序或任务访问或共享。碎片甚至不是应用程序清单的一部分,因此不会暴露在外部。 Android不必单独担心每个片段,因为片段生命周期与其父Activity的绑定。 Android不关心你在内部对片段做什么,它可以结束活动,它内部的一切也被破坏。