初学安卓总结

Android学习

第一章:Activity生命周期



前言

主要是自己在安卓学习路上的一些总结
思路不清晰勿喷。


一、什么是Activity?

简介

Activity 类是 Android 应用的关键组件,而 Activity 的启动和组合方式则是该平台应用模型的基本组成部分。

基本概念

Activity(活动)是一种可以包含用户界面的组件,主要用于和用户进行交互。
一个应用程序可以包含多个或零个活动。很少有不包含活动的应用程序。在应用程序中,可以有多个Activity,这些Activity组成了ActivityStack(Activity栈),用户可以看到的并且可以操作的界面(Activity),这个Activity是在栈顶,之前的Activity会被压在下面,用户不可见。

AndroidManifest

每个应用项目必须在项目源设置的根目录中加入AndroidManifest.xml 文件(且必须使用此名称)。 清单文件会向 Android 构建工具、Android 操作系统和 Google Play 描述应用的基本信息。
所有活动都要在Androidmanifest文件中注册才能运行。

action标签

向 Intent 过滤器添加操作。 intent-filter 标签元素必须包含一个或多个 action标签元素。如果 Intent 过滤器中没有 action标签元素,则过滤器不接受任何 Intent 对象。

category标签

向 Intent 过滤器添加类别名称。

dialog的使用

暂时只了解DialogFragment,对话框的使用。

Intent与Intent过滤器

Intent 分为两种类型:显式,隐式。
Intent 是一个消息传递对象,您可以用来从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:

启动Activity
启动服务(service)
传递广播(broadcast receiver)
例子:

学习Androidmanifest文件以及intent时遇到的一些问题。

<activity android:name="MainActivity">
    <!-- This activity is the main entry, should appear in app launcher -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name="ShareActivity">
    <!-- This activity handles "SEND" actions with text data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
    <!-- This activity also handles "SEND" and "SEND_MULTIPLE" with media data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <action android:name="android.intent.action.SEND_MULTIPLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="application/vnd.google.panorama360+jpg"/>
        <data android:mimeType="image/*"/>
        <data android:mimeType="video/*"/>
    </intent-filter>
</activity>

第一个 Activity MainActivity 是应用的主要入口点。当用户最初使用启动器图标启动应用时,该 Activity 将打开:

ACTION_MAIN 操作指示这是主要入口点,且不要求输入任何 Intent 数据。
CATEGORY_LAUNCHER 类别指示此 Activity 的图标应放入系统的应用启动器。如果 activity标签 元素未使用 icon 指定图标,则系统将使用 application标签元素中的图标。
这两个元素必须配对使用,Activity 才会显示在应用启动器中。

第二个 Activity ShareActivity 旨在便于共享文本和媒体内容。尽管用户可以通过从 MainActivity 导航进入此 Activity,但也可以从发出隐式 Intent(与两个 Intent 过滤器之一匹配)的另一应用中直接进入 ShareActivity。

小结:android.intent.action.MAIN:决定应用的入口Activity,也就是我们启动应用时首先显示哪一个Activity。
android.intent.category.LAUNCHER:表示activity应该被列入系统的启动器(launcher)(允许用户启动它)。Launcher是安卓系统中的桌面启动器,是桌面UI的统称。

action和category都是Intent的组成部分,前者表示意图的动作,后者表示意图的类别。所以对于上面这段话,我的理解是:android.intent.action.MAIN表明了一个应用启动时首先启动这个Activity的动作。怎样启动呢?android.intent.category.LAUNCHER告诉了我们动作是什么:通过App的启动器(我个人理解成桌面的图标)来启动。

三、Activity生命周期

1.四种状态

运行状态

当一个活动位于返回栈的栈顶时,这时活动处于运行状态。系统最不愿意就是回收这种状态的活动,因为会给用户带来很糟糕的体验。

暂停状态

当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。你可能会觉得既然活动已经不在栈顶了,还怎么会可见呢?这是因为并不是每一个活动都会占满整个屏幕的, 比如对话框形式的活动只会占用屏幕中间的部分区域,你很快就会在后面看到这种活动。处于暂 停状态的活动仍然是完全存活着的,系统也不愿意去回收这种活动(因为它还是可见的,回收可 见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种活动。

停止状态

当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。系统仍然会为这种活动保存相应的状态和成员变量,但是这并不是完全可靠的,当其他地方需要内存时,处于 停止状态的活动有可能会被系统回收。

销毁状态

当一个活动从返回栈中移除后就变成了销毁状态。系统会最倾向于回收处于这种状态的活 动,从而保证手机的内存充足。

2.活动的生存周期

onCreate()

这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它 会在活动第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如 说加载布局、绑定事件等。

onStart()

这个方法在活动由不可见变为可见的时候调用。

onResume()

这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。

onPause()

这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

onStop()

这个方法在活动完全不可见的时候调用。它和0nPause()方法的主要区别在 于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而 onStop()方法并不会执行。

onDestroy()

这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。

onRestart()

这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

状态变化:

用户触发和系统触发的不同事件会导致 Activity 从一个状态转换到另一个状态。

小结:

1.完整生存期。活动在onCreate()方法和onDestroy()方法之间所经历的,就是完整生存 期。一般情况下,一个活动会在onCreate()方法中完成各种初始化操作,而在 onDestroy()方法中完成释放内存的操作。
2.可见生存期。活动在onStart()方法和onStop()方法之间所经历的,就是可见生存期。 在可见生存期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可 以通过这两个方法,合理地管理那些对用户可见的资源。比如在onStart()方法中对资 源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的活动不会 占用过多内存。
3.前台生存期。活动在onResume()方法和onPause()方法之间所经历的就是前台生存期。 在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行交互的,我 们平时看到和接触最多的也就是这个状态下的活动。

下面是安卓官方给的图解:
在这里插入图片描述

总结

第一天学习安卓,暂时总结这么多。后续继续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值