Android四大组件完全解析(一)---Activity

本文详细介绍了Android中的Activity,包括Activity的生命周期、与Fragment的交互,以及任务栈管理。Activity是用户交互的核心,Fragment用于模块化界面,任务栈管理则涉及用户在应用间的导航。文章探讨了Activity的创建、状态保存、生命周期方法,以及如何通过Intent启动新Activity和管理任务栈。同时,还涵盖了Fragment的生命周期、添加到Activity中的方法以及管理回退栈的技巧。
摘要由CSDN通过智能技术生成

本文参考\android\android\frameworks\base\core\java\android\app\Activity.java文件中的类注释,以及android/frameworks/base/docs/html/guide/components/activities.jd文件


One Activity简介:

Activity是一个单独的、可以和用户交互的东西。几乎所有的activities都要与用户交互,所以activity承担着创建window的重任,你可以通过setContentView的方法往window里填充view。通过一个主题属性android.R.attr#windowIsFloating来设置activities是全屏显示full-screen还是悬浮窗isfloat(比如dialog,或者是一个悬浮的view),当然这里所说的全屏显示不包括状态栏。

<!-- 全屏显示  -->
 <item name="windowIsFloating">false</item>

在对应的主题中有dialog主题样式的

<!-- 悬浮窗显示 -->
 <style name="Theme.Material.BaseDialog">
''''''
 <item name="windowIsFloating">true</item>
 ''''''
 </style>

在继承Activity时需要实现两个方法

  • onCreate: 在该方法中初始化activity。更重要的是,通常需要在该方法中调用setContentView方法来加载layout文件,并且用findViewById来检索需要和你进行交互的layout文件中的控件。
  • onPause :在用户离开该activity时调用该方法处理。用户做出的任何修改都应该在该方法中提交commit(通常保存提交的数据使用android.content.ContentProvider)。

为了能够使用 android.content.Context#startActivity Context.startActivity()打开一个activity,我们需要将activity在对应包下的androidmanifest文件中使用activity节点进行声明

<application android:icon="@drawable/icon"
''''''
<!-- 声明activity -->
<activity android:name=".MainMenuActivity"
''''''
</activity>
''''''
</application>

Two 与activity相关的主题有

  • #Fragments
  • #ActivityLifecycle
  • #ConfigurationChanges
  • #StartingActivities
  • #SavingPersistentState
  • #Permissions
  • #ProcessLifecycle

一,Fragments:

fragment简介

Fragment开始于Android3.0,是应用程序组件碎片的意思,可以被放在activity内部。通过FragmentManager来管理与fragment的交互。fragmentmanager的对象可以通过两种方式获取到

  • Activity#getFragmentManager() Activity.getFragmentManager()
  • Fragment#getFragmentManager() Fragment.getFragmentManager()

fragment类可以用来获取各种各样的结果,在它内部,它代表一个普通的操作或者是交互接口。fragment与包含他的activity紧密相连,fragment依赖于activity存在。虽然fragment有它自己的生命周期,但fragment的生命周期与activity的生命周期息息相关。fragment生命周期图如下:
这里写图片描述

fragment依附于activity存在,当activity被stopped之后,activity中的fragment不能够started。当activity销毁后,位于activity中的fragment也随之销毁。

所有Fragment的子类必须包含一个无参的构造方法。当有需要时尤其是在状态恢复期,framework层会经常重新初始化fragment,framework会去找无参构造器去初始化fragment。如果fragment中无参构造器不可用的话就会在状态恢复时抛出 runtime exception 。

fragment相关主题有:

  • #OlderPlatforms旧版本
  • #Lifecycle生命周期
  • #Layout布局
  • #BackStack
OlderPlatforms:

fragment 是在Android3.0才加入进来的,所以在Android3.0之前如果想要使用fragment可以使用android.support.v4.app.FragmentActivity具体可以参考
fragments for all

Lifecycle
  • #onAttach 当fragment与activity绑定时调用
  • #onCreate 当fragment初始化创建时调用
  • #onCreateView创建并返回与fragment相关的view视图
  • #onActivityCreated 通知fragment它所绑定的activity已经oncreate
  • #onViewStateRestored 通知fragment所保存的所有view的状态已经被恢复
  • #onStart fragment对用户可见
  • #onResume fragment对用户既可见又获取焦点
  • #onPause fragment不再能和用户交互(activity被paused或者fragment之间的操作)
  • #onStop fragment对用户不可见(activity被stopped或者fragment之间的操作)
  • #onDestroyView 清除与fragment相关的所有views相关资源
  • #onDestroy 清除fragment状态
  • #onDetach 当fragment与activity解绑时调用
    fragment生命周期
layout

fragment可以作为应用程序布局的一部分,借助fragment,activity可以更好的 模块化,为更大的屏幕创建更复杂的用户交互,帮助应用实现小屏和大屏之间的尺寸的切换。例如,在一个activity上可以编写一个有item列表的fragment,然后再组合一个fragment去显示每个item的详细信息。

 <fragment
            class="com.example.android.wifidirect.DeviceListFragment"
            android:id="@+id/frag_list"
            android:layout_width="match_parent"
            android:layout_height="@dimen/phone_list_height">
            <!-- Preview: layout=@layout/row_devices -->
        </fragment>

fragment相关可以参考:
fragment嵌套
fragment与activity

二,ActivityLifeCycle

在系统中,activity被一个称为activity栈activity stack的东西在管理。当新创建一个activity时,就被被放在栈顶,并且成为正在运行的activity—-先前的activity会被保留在activity的下方,当位于栈的activity退出后,位于该activity下方的activity就会运行到前台,activity栈遵循栈的原则:后进先出。

一个activity基本上有四种状态

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值