Android组件基本介绍之Activity
来源:互联网 发布:java初级中级高级 编辑:程序博客网 时间:2024/06/05 10:01
一定有很多人从事Android开发,这篇文章主要是对于Android开发入门新生来阅读的,就比如小编我,就是刚刚涉及这个领域,浅谈一些对已学知识的认识,希望各位大神评论指正。本文的叙述不会太专业,以通俗易懂为主,专业党海涵勿喷。
Android系统与苹果手机的IOS系统算是移动端的两个巨头了,掌握它们的基本原理对于移动端的开发而言是基础性的工作。关于IOS相关开发基础介绍请点这里
Android系统主要由四大核心组件构成,分别是:Activity组件,Service组件,Broadcast Receiver组件以及ContentProvider组件。下面来具体介绍这四个组件的基本功能。
一、Activity的概念
什么是Activity呢?先来个大家看个熟悉的东西 怎么样是不是很熟悉?没错,这是美团!!!大家看到的美团App的一个界面,这个界面就是一个activity。我们在App的使用过程中会切换多个界面,对于一个App应用而言,每个界面对应于App里的一个activity组成。可以这么想:Activity是组成App向用户展示的一个基本单元,当然不是唯一的单元。
Activity是App应用程序的一个组件,它为用户提供一个屏幕,这个屏幕可大可小,大到占据整个手机屏幕,小到自定义大小并悬浮于其他窗口之上。在这个显示窗口里有许多按钮,我们可以把它们理解成接口,用来为用户提供服务等相关功能的入口。之前提到,一个App里是由多个Activity组合而成的,但是其中有一个最主要的Boss级别的,被称为MainActivity。这个MainActivity是干嘛用的呢,就是当我们启动一个App的时候最先展示的用户界面(其实就是当门面的界面啦)。App里的Activity之间是可以相互启动的,但是注意,当Acitivity被另一个Acitivity覆盖之后,前一个Acitivity就被"停止了",这里的停止不是说停止运行,而是它被冷藏了,没办法,谁让主人有了新宠呢,旧Activity当然被雪藏啦,这个雪藏的地方叫做“栈”,在移动端通常叫做Back Stack。当新的Activity获得主人焦点之后,这个Acitivity被推送置栈顶,而旧Activity则被置于下一层,被骑着的感觉灰常不好。所以当用户对新的Acitivity不感兴趣之后,按了back按钮,好了,旧Acitivity那就一个开心啊,果断获得小宇宙把骑在它头上的Acitivity顶了出去,这就是栈的后进先出规则。
所以Back按钮实际上是调用了栈的LIFO规则,这就是为什么我们在使用App的时候只能由Back键得到先前的界面而没有前进的按键。其实旧的Acitivity在上面的过程中经历了Acitivity生命周期里的大起大落过程,由OnStop状态经过OnStart回到OnResume状态,具体Acitivity的生命周期可以参见之后的内容。当Activity恢复时,我们就可以重新获得我们想要的数据及资源了。
二、Activity的生命周期
请大家看下面这幅图
这里要给大家介绍的作为一个Activity,其生命里的7个最关键的人生起伏点。它们分别是:OnCreate,OnStart,OnResume,OnPause,OnStop,OnRestart,OnDestroy。
在介绍这7种状态之前,我们先从手机上回忆一下,我们在启动App的时候,会遇到如下情况:
A)刚启动时,一个鲜明的显示界面弹了出来;
B) 我们当前的界面被一个透明的或者Dialog样式的界面给覆盖了。
C) 我们当前的界面被另一个界面给覆盖了
D) 系统内存不足,App崩溃了。
当发生情况A时,我们从上文知道了,那个界面叫MainActivity,可以说是App的启动入口,此时主Acitivity是经历了OnCreate--->OnStart---->OnResume之后达到了Running状态。是处于被激活时的特征。
当发生情况B时,我们的注意被那该死的弹出界面吸引了,我们的焦点转移了,此时咱老朋友还在眼巴巴的在后面看着我们希望我们去重新注意它,所以原先Activity的状态是依然与Manager保持联系,系统继续维护当前状态,只不过失去了我们队它的兴趣,注意:此时它仍然是可见的,并不是C情况里的完全覆盖。我们把这个状态称之为OnPause状态。
当发生情况C时,我们的Acitivity界面被另一个砸场子的Activity给完全特么的覆盖了,看都看不到一眼了,那新来的还在为获取用户焦点洋洋得意。这时的状态叫做OnStop状态。只有通过Back按键才能重新激活之前的Activity。
当发生情况D时,完蛋了,不好意思,由于系统的内存分配不足,系统需要回收一定的内存来支持别的系统开销,我们弱小的Activity甚至整个App都被killed,此时就是killed状态。
这里我们需要注意一点,在Activity的生命周期中,只有人工的创建却不能人工的销毁,销毁工作是交给Acitivity Manager来执行的。当我们按下Back的时候,实际上是交换了两个Activity的栈的位置,改变了不同的Activity的状态,由Active Running转到OnStop。在Activity栈中,除了最顶层的Activity处于激活状态之外,其余的Activity都是处于会由于内存不足被系统回收的可能,而最底层被回收可能性越大。
我们已经了解了OnCreate、OnStart、OnResume、OnPause、OnStop这几个状态,OnCreate是创建Activity时被调用,OnStart才是正式的启动,这个想当于先构建一个模板,再来正式生成,至于OnResume相当于预热启动。现在来看一下OnReStart以及OnDestroy这两个状态。OnDestroy状态是系统回收资源的时候进行释放内存时的调用,真正的摧毁了一个Activity。而OnReStart是由OnStop到重新激活一个Activity时所调用的。下面做一个关于Activity生命周期的总结:
OnCreate():App应用程序入口,程序数据初始化,用户界面设计(XML中),如以下代码为加载我们的XML用户界面以及对象数据
<div style="text-align: center;"><span style="font-family:SimSun;">setContentView(R.Layout.xxx)</span></div><div style="text-align: center;"><span style="font-family:SimSun;"> if(savedInstanceState!=null)//获取对象数据</span></div><span style="font-family:SimSun;"> {savedInstanceState.get("xxxxx")}</span>
OnStart():在OnCreate()方法之后被调用,或者从onReStart之后被调用;
OnResume():在OnStart()之后被调用;
OnPause():被别的弹出式Activity局部覆盖但是扔可见的情况下,被管理器维护当前状态
OnStop():被别的Activity覆盖,此时会保存Activity的状态信息,之后被压入栈处于新Activity下层。
OnReStart():由onStop转为onStart时调用。
OnDestroy():被系统回收时调用。
下面是一个完整的Activity声明周期相关代码:
public class myActivity extends Activity{ public void OnCreate(Bundle savedInstanceState); public void OnStart(); public void OnResume(); public void OnPause(); public void OnStop(); public void OnRestart(); public void OnDestroy();}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">当我们需要自定义自己的Activity相关行为的时候,只需要@Override以上方法,编译器会自动调用基类的对应方法,如super.OnCreate();</span>
我将在接下来的文章里将解Activity的创建与启动的相关内容。
0 0
- Android组件基本介绍之Activity
- Android应用程序的基本组件之Activity
- 学习笔记:Android基本组件之Activity
- Android四大基本组件之 Activity
- Android08--Android之基本组件Activity
- Android组件介绍之Activity(2)
- Android四大组件之Activity介绍
- Android四大组件之Activity的介绍
- Android应用组件之Activity介绍1
- Android应用组件之Activity介绍2
- Android应用组件之Activity介绍3
- Android基本组件-Activity
- Android四大基本组件之 BroadcastReceiver介绍
- android基本组件介绍
- Android 基本组件介绍
- Android基本组件介绍
- 四大基本组件之Activity
- 4.Android四大组件之Activity基本用法
- 360浏览器上的对js支持的一些特别的问题
- C#: Problem trying to resolve a class when two namespaces are similar
- FaceBook机器学习开源DL模块
- shell编程基础
- 点积分换地方和基督教和发动机合肥几点回房间倒海翻江
- Android组件基本介绍之Activity
- Placement of class definition and prototype
- c语言sockt实现通过浏览器访问ip返回数据
- LeetCode 89 Gray Code
- Integer to Boolean strange syntax
- Partition List
- 【Android基础篇】使用<include>标签分割Layout
- 3_9988袖但闽暑德檬谗震直经
- 一亩田GIT基础教程