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()方法之间所经历的就是前台生存期。 在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行交互的,我 们平时看到和接触最多的也就是这个状态下的活动。
下面是安卓官方给的图解:
总结
第一天学习安卓,暂时总结这么多。后续继续更新。