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
原创粉丝点击