Android 分析 Activity 与 Fragment 的区别,部分使用的差异
一、基本概念
-
Activity:
Activity
是应用中单独一个界面的一个组件,通常一个Activity
对应一个界面(或屏幕)。Activity
控制了一个应用界面的生命周期,并且能够处理用户的输入和交互。 -
Fragment:
Fragment
是一种可以嵌套到Activity
中的 UI 组件。一个Fragment
可以视为一个更小的界面模块,它需要依附于一个Activity
进行存在。一个Activity
可以包含多个Fragment
,并且一个Fragment
也可以在不同的Activity
中复用。
二、生命周期的差异
-
Activity 生命周期:
Activity
的生命周期由一系列的回调方法管理,主要包括onCreate()
,onStart()
,onResume()
,onPause()
,onStop()
,onDestroy()
等。public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onStart() { super.onStart(); } @Override protected void onResume() { super.onResume(); } }
-
Fragment 生命周期:
Fragment
的生命周期也由多个回调方法控制,但它的生命周期与宿主Activity
紧密耦合。常见的生命周期方法包括onAttach()
,onCreateView()
,onActivityCreated()
,onStart()
,onResume()
,onPause()
,onStop()
,onDestroyView()
等。public class MyFragment extends Fragment { @Override public void onAttach(Context context) { super.onAttach(context); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_layout, container, false); } @Override public void onResume() { super.onResume(); } }
三、功能和职责
- Activity:
Activity
是用户交互的入口点,通常是一个完整的屏幕。- 管理应用的窗口,控制应用生命周期。
- 承载和管理
Fragment
。 - 一个应用可以包含多个
Activity
,每个Activity
实现不同的功能。
- Fragment:
Fragment
是一个可以嵌套在Activity
中的模块,可以包含自己独立的布局、生命周期和行为。- 主要用于实现更灵活的 UI 设计,例如:单页面和多页面的切换,或者在不同的屏幕大小上进行自适应布局。
- 一个
Activity
可以包含多个Fragment
,每个Fragment
可以包含自己的 UI 和业务逻辑。
四、嵌套与复用
-
Activity:
Activity
之间一般是互相独立的,无法嵌套在其他Activity
中。- 通过
Intent
进行相互跳转。 - 每次启动一个新的
Activity
都是一个全新的 UI,不能轻易复用。
-
Fragment:
Fragment
可以嵌套在Activity
中,一个Activity
可以包含多个Fragment
。Fragment
可以在不同的Activity
之间复用,这是Fragment
的一个重要特点。可以通过FragmentTransaction
来动态管理Fragment
的显示和隐藏。Fragment
适合于开发支持多种屏幕大小的应用,尤其在平板设备中使用非常方便。
五、交互方式
-
Activity 之间的交互:
Activity
之间的通信一般通过Intent
实现,数据可以通过Intent
中的Extras
传递。- 在
Activity
中启动另一个Activity
,通过startActivity()
或startActivityForResult()
来实现。
Intent intent = new Intent(this, AnotherActivity.class); intent.putExtra("key", "value"); startActivity(intent);
-
Fragment 之间的交互:
Fragment
之间的交互通常通过宿主Activity
来进行,或者通过Fragment
之间的直接调用来实现。Activity
可以通过getSupportFragmentManager()
来获取和管理Fragment
,并且通过接口回调来传递数据。
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, new MyFragment()); transaction.commit();
六、UI 设计
-
Activity:
Activity
的 UI 是通过setContentView()
方法来设置的,通常一个Activity
对应一个完整的界面。Activity
更适合用来承载较大的界面,通常它充当了一个独立的界面容器。
-
Fragment:
Fragment
的 UI 是通过onCreateView()
方法来创建的,它可以独立于Activity
存在。Fragment
更适合用来管理和显示小的 UI 模块,多个Fragment
可以共享同一个Activity
的界面。
七、性能和内存管理
- Activity:
Activity
生命周期较为简单,内存管理相对容易,但由于它占据的是一个单独的栈空间,多个Activity
的管理和启动可能会造成较大的内存开销。
- Fragment:
Fragment
具有较低的内存开销,因为它是附属于Activity
的一个模块,可以共享宿主Activity
的内存空间。- 通过
FragmentTransaction
动态地管理Fragment
的显示和隐藏,可以避免一次性加载多个页面,提高性能。
八,使用样例
九、总结
特性 | Activity | Fragment |
---|---|---|
生命周期 | 独立生命周期,由系统管理 | 依赖于宿主 Activity 的生命周期 |
职责 | 代表一个界面,处理大部分 UI 逻辑 | 代表界面的一部分,可以多次复用 |
嵌套 | 无法嵌套 | 可以嵌套在 Activity 中,也可以在多个 Activity 中复用 |
UI | 通常是一个完整的界面 | 通常用于处理界面的一部分,可以多次复用 |
交互 | 通过 Intent 和 startActivity() 进行跳转 | 通过宿主 Activity 或接口回调进行交互 |
性能 | 需要较大的内存开销 | 共享宿主 Activity 的内存,性能更优 |
总结:Activity
更适合用于表示一个独立的、完整的界面,而 Fragment
更适合用于构建可复用的、灵活的界面组件。通过结合使用 Activity
和 Fragment
,可以构建出更加灵活和高效的 Android 应用界面。
原文地址:https://blog.csdn.net/2402_85226471/article/details/144438235
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!