自学内容网 自学内容网

Android 分析 Activity 与 Fragment 的区别,部分使用的差异

一、基本概念

  • ActivityActivity 是应用中单独一个界面的一个组件,通常一个 Activity 对应一个界面(或屏幕)。Activity 控制了一个应用界面的生命周期,并且能够处理用户的输入和交互。

  • FragmentFragment 是一种可以嵌套到 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 的显示和隐藏,可以避免一次性加载多个页面,提高性能。

八,使用样例

点我跳转下一篇

九、总结

特性ActivityFragment
生命周期独立生命周期,由系统管理依赖于宿主 Activity 的生命周期
职责代表一个界面,处理大部分 UI 逻辑代表界面的一部分,可以多次复用
嵌套无法嵌套可以嵌套在 Activity 中,也可以在多个 Activity 中复用
UI通常是一个完整的界面通常用于处理界面的一部分,可以多次复用
交互通过 IntentstartActivity() 进行跳转通过宿主 Activity 或接口回调进行交互
性能需要较大的内存开销共享宿主 Activity 的内存,性能更优

总结Activity 更适合用于表示一个独立的、完整的界面,而 Fragment 更适合用于构建可复用的、灵活的界面组件。通过结合使用 ActivityFragment,可以构建出更加灵活和高效的 Android 应用界面。


原文地址:https://blog.csdn.net/2402_85226471/article/details/144438235

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!