【2】Android基础之四大组件 - Activit & Fragment

Activity的生命周期

在系统中的Activity被一个Activity栈所管理。当一个新的Activity启动时,将被放置到栈顶,成为运行中的Activity,前一个Activity保留在栈中,不再放到前台,直到新的Activity退出为止。

Activity有四种本质区别的状态

  1. 在屏幕的前台(Activity栈顶),叫做活动状态或者运行状态(active or running)
  2. 如果一个Activity失去焦点,但是依然可见(一个新的非全屏的Activity 或者一个透明的Activity
    被放置在栈顶),叫做暂停状态(Paused)。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被杀掉。
  3. 如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被杀掉。
  4. 如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接杀掉它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。

这里写图片描述

onCreate():Activity第一次创建时被调用。该方法默认继承了super.onCreate(savedInstanceState)用于保存活动之前状态。
onStart():在onCreate()方法执行完随便执行的方法,此时视图还是不可见状态。
onResume():Activity进入可见状态但未完全可见,当onResume执行之后,Activity进入完全可见并且可交互状态。
onRestart():当Activity执行至onPause()方法,然后又重新启动时调用。
onPause():当系统准备将当前Activity后台时调用,此时活动处于暂停状态。通常停止一些动画以及比较占用CPU资源的动作,为了尽快的切换到下一个Activity,或者关闭一些专用的入口。
onStop():当Activity对用户不可见时调用。这可能发送在活动即将被销毁,或者另外一个Activity重新启用并覆盖它。
onDestroy():在Activity销毁前调用。这是Activity执行的最后一个方法。

Fragment生命周期

Framgent可以理解为是Activity的一个子组件,可以在一个Activity中包含多个Fragment。它有自己的生命周期,但是依赖Activity的生命周期。
Activity通过FragmentManager对Fragment进行管理,包括添加、替换和移除。

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.fragment_container, new MyFragment());
transaction.commit();

这里写图片描述

onAttach():fragment关联Activity。
onCreate():系统创建fragment的时候回调它。 Fragement 也可以 重写 onSaveInstanceState(BundleoutState) 方法, 保存Fragement状态。
onCreateView():第一次使用时,fragment会在上面加载已给layout布局出来。
onActivityCreated():当Activity中的onCreate方法执行完之后调用,用来判断活动是否已经被创建。
onStart():和Activity一致,启动fragment时回调,此时fragment可见。
onResume():和Activity一致,在Activity中运行时可见的。fragment为当前视图,可获取焦点。
onPause():和Activity一致,其他fragment可以获得焦点,用户当前暂时离开了这个fragment。
onStop():和Activity一致,fragment不可见的。
onDestroyView():fragment中的布局被移除时调用。表示fragment销毁相关联的UI布局,清除所有跟视图相关的资源。
onDestroy():销毁fragment对象。
onDetach():解除fragment和Activity的关联时调用。

Activity的启动模式

在Activity系统中,我们把TaskRecord叫做是任务栈,而我们启动的Activity即是包装成一个个ActivityRecord,它记录了Activity的所有信息。启动一个Activity让它显示到前台的操作为入栈,退出一个Activity并销毁为出栈。

  • Standard:不复用模式。启动的Activity会重新创建,并压入栈顶。
  • SingleTop:栈顶复用模式。启动的Activity会判断当前栈顶是否已经存在实例,如果存在,直接复用,若不存在,重新创建并压入栈顶。
  • SingleTask:栈内复用模式。启动的Activity会判断当前栈内是否已经存在实例,如果存在,清除之上的所有Activity实例,让该Activity处于栈顶,若不存在,重新创建并压入栈顶。
  • SingleInstance:该Activity会在一个单独的任务栈中运行,且该任务栈中,只有这一个Activity实例。

Activity的通信

Intent

Intent(意图),是用于应用组件间通信和启动组件的对象。可以使用显示Intent(指定目标组件),或隐式Intent(不指定目标组件)。
Intent Filter用于AndroidManifest.xml中声明Activity可以响应哪些Intent。

Bundle

常用于复杂数据的传输,将多个数据包装成Bundle对象,再通过Intent传递Bundle在应用组件之间。

Configuration Changes

配置变化,可以在AndroidManifest.xml中使用android:configchanges属性处理配置变化。

<activity android:name=".MyActivity"
    android:configChanges="orientation|screenSize">
</activity>

当设置配置发生变化,如屏幕旋转、语言切换等,Activity会重新创建以适应新的配置。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 处理横屏
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        // 处理竖屏
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值