android 四大组件之 Activity

  今天是清明节,加班了一天。android里面的activity是人机交互的主要途径,也就是我们见到的view。每一个activity都对应着一个xml文件,这个xml文件的路径是res-> layout。如果你是刚刚接触android,应该好好的看看一个project里面有多少文件夹,这些文件夹有什么作用。

  要画一个view,我们只要在activity对应的xml文件里面添加控件和布局就行了。同时我们也可以在activity的class里面通过编写代码来实现控制control的位置,大小等。每一个activity都要在androidManifest.xml文件里面注册。我们最好不要通过添加java文件,然后继承Activity的方式添加自己的activity,正确的步骤是1. 选中自己的project,点击file->new ->others->android activity,这样eclipse会自动在mainfest文件里面,添加相应的注册节点,这样我们自己的一个activity就生成了。在生成的java文件里面,会重写onCreate 方法,activity都是在onCreate方法开始执行。也许你会很奇怪,为什么我们看不到任何main函数实现是哪个activity launcher, 在android里面main函数的功能是在mainfest.xml文件里面配置的,仔细看这个文件你会发现有个activity的intent-filter 会有

 <intent-filter >                

  <action android:name="android.intent.action.MAIN" />

      <category android:name="android.intent.category.LAUNCHER" />            

</intent-filter>

这里的MAIN就现实了main函数的方式,试试把main换成其他的,程序就不能运行了,具体的报什么错,可以自己尝试一下。

Activity有自己的生命周期,从activity launched 开始,system 调用onCreate的方法,这个方法是就是初始化一个activity。下图就是一个activity整个的生命周期。此图是goo

是google的官网提供。

  根据google 官网给出的说明,系统有一个activity stack管理一个app的所有activity。按照栈后进先出的原则,当一个新的activity被创建后,就放在stack的top,成为一个正在running的activity,先前的activity会一直在stack的底部,直到当前正在running的activity退出。

  从上面的图上,我们可以看出一个activity有4个主要的状态,running,paused,stopped,killed。在activity是Paused,stopped的时候,如果系统的内存不够,会kill这些状态的activity。

 

一个新的activity 启动入栈后,这个activity就在屏幕最前端,也就是处于栈的最顶部。这个时候activity可见并且处于和用户可交互的状态。

onStart在onCreate之后调用,或者在Activity从stop转为Active的时候被调用,一般是执行了onStart之后就执行onResume。

onResume是在Activity从Pause状态转到Activity时候调用,所以到onResume用户就获得焦点可以和界面交互了,onStart是Activity可见,单还不能交互。

Paused是当前Activity被一个透明的或者dialog覆盖时的状态,此时窗口管理器保持与其的连接,继续维护内部状态,这个Activity依旧可见,但是已经失去焦点不可与用户交互。

stop 是当前Activity被覆盖,失去焦点不可见。

kill就是挂了。

 

结合Activity生命周期的图,我们可以看出来,一个Activity是从launch -> create -> start (可见但是没有焦点,不能交互)-> resume(可见,有焦点,可以交互) -> running(运行). Activity在运行的时候,有可能会有dialog覆盖在Activity上,也有可能是透明的Activity覆盖到当前的Activity上,所以这个时候,Activity就会出现 ->onPause(暂停状态),当覆盖物消失的时候,Activity又回到onResume()状态,在onPause后Activity就到了 -> stop状态了,这个时候Activity就变的不可见,失去焦点,也是最容易被系统回收的,在系统的内存压力过高的时候,系统就要有可能回收这个Activity了,这个时候APP就要被kill掉了,也有可能起死回生,进入到restart状态,重新进入一轮局部生命周期。onStop后有可能进入到onDestroy状态,进入到destroy就回生无力了,只能shutdown Activity。

  

posted @ 2013-04-09 21:14  heavenliu  阅读(263)  评论(0编辑  收藏  举报