Android 为什么可以';我不能通过参考发起活动吗?
《Android开发者指南》指出,活动是通过意图启动的:Android 为什么可以';我不能通过参考发起活动吗?,android,android-fragments,android-activity,android-lifecycle,Android,Android Fragments,Android Activity,Android Lifecycle,《Android开发者指南》指出,活动是通过意图启动的: Intent intent = new Intent(this, SignInActivity.class); startActivity(intent); 对于片段,通常在屏幕上显示的方式如下: ExampleFragment fragment = new ExampleFragment(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTra
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);
添加片段时,您已经指定了将该片段插入的确切位置。所以,理想的方法是
在任何情况下,您都不能只启动或使用片段,而不将其附加到现有活动。因为
活动
生命周期由Android管理,而片段
生命周期与包含它的活动相关联
如前所述,活动
生命周期由Android管理。这是Android管理系统资源和处理后台堆栈所必需的
另一方面,引入了片段
,以模块化和更好地组织不同大小设备的UI。根据文件规定:
从蜂巢开始,活动
实现可以利用
Fragment
类为了更好地模块化他们的代码,构建更多
用于更大屏幕的复杂用户界面,并有助于扩展
小屏幕和大屏幕之间的应用
要回答问题的后一部分,您确实可以将活动的结果传递给第二个活动。但是您永远不应该为此创建
活动
类的实例。正确的方法是使用startActivityForResult()
,并通过Intent
将结果值发送到目标活动,Android自己处理活动生命周期。看看Activity类的方法,它们就像是在填补空白。安卓在这里发号施令。通过这些方法,它只会在创建、恢复、暂停此活动时询问您是否要执行某些操作
Android在内部处理活动生命周期的原因有很多:
上下文
和窗口管理
都是在幕后为您设置的。想象一下,如果你必须为你创建的每一项活动做额外的工作,那么会有多少额外的工作newmyactivity()
,这怎么可能呢。这就是为什么活动和其他外部可调用组件必须在应用程序清单中声明的原因另一方面,碎片是内部的。它们位于活动内部,不以任何方式从外部应用程序或任务访问或与外部应用程序或任务共享。片段甚至不是应用程序清单的一部分,因此不会暴露在外部。Android不需要单独考虑每个片段,因为片段生命周期与其父活动的生命周期相关联。Android不在乎你在内部如何处理碎片,它可以结束活动,并销毁其中的所有内容。你可以使用(自定义)操作。否?+1这就是为什么为活动和片段创建显式构造函数(带参数)不是一个好主意。您能否解释一下生命周期管理的要求(
onCreate
,onResume
,等等)与活动必须由系统实例化的要求有关吗?它与Android的设计有更多的关系。Android只识别活动/服务。。在舱单中声明的。AFAIU,否则,它监视创建的每个对象以检查它是否属于上述类之一将是一件麻烦和低效的事情。因此,用户创建的对象被视为普通Java对象。因此,Android不可能管理其生命周期。应该给你一个系统如何控制活动的概述。我觉得这个答案的大部分并没有解决这个问题。我将试着回应你的观点:1。设置活动可以在其构造函数中完成,子类可以重用该构造函数。避免使用样板文件不是一个问题。2.我不是建议删除startactivity
,而是建议可以传递先前构造的活动实例,而不是类对象。对于其他应用程序,它们引用的是一个类还是某个晦涩包的构造函数并不重要。对于已经创建的活动实例,是否有任何原因不可能进行backback操作?4.对不起,我看不出和这个问题有什么关系。