Android Activity学习 <一> Activity基础知识和生命周期

Activity是与用户交互的组件。大多数Activity都需要与用户交互,所以它需要以setContentView(View)创建放置UI的窗口。

Activity是应用程序的重要组成部分,它提供一个屏让用户可以交互。每个Activity提供一个Window去画用户界面。Window通常都是充满屏幕(全屏),但其实也可以小于屏幕并悬浮于其它Window之上。

一个应用程序可以包含多个Activity,并在多个Activity之间切换。通常,都会有一个Activity作为主Activity。应用程序启动时,首先显示此Activity,为了实现不同功能,可以通过它去启动其它Activity。

当一个新Activity启动时,老ActivityStop,系统会把它放入一个先进后出的Activity栈。当此新Activity退出时,系统会将之前的Activity出栈,并给与其焦点。


申报Activity:
要创建Activity, 必须在manifest文件中申报Activity. 这样,系统才会知道此Activity。
manifest中,在 <Application> 条目中添加 <Activity> 条目。

<manifest ... >

  <application ... >

      <activity android:name=".ExampleActivity" />

      ...

  </application ... >

  ...
</manifest >



Manifest中主Activity设定
在Manifest文件中,在<Activity>条目中,可以利用  <intent-filter>条目指定intent filters值。 

用来指定其它应用程序怎样来Active 它。

当时用Android SDK创建新的Application时,会有Activity被自动写入Manifest.且此Activity响应main" action。且为  "launcher" category。


<activity android:name=".ExampleActivity"android:icon="@drawable/app_icon">
    <intent-filter>
        <actionandroid:name="android.intent.action.MAIN" />
        <categoryandroid:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>


此处, <action>条目指定为main.说明它是Application的入口点。即主 Activity。
<category> 条目指出 它位于system'sapplication launcher。

如果您需要您添加的Activity为自我维护且不许其它应用程序启动它,则不需要指定任何intent filters。

只需要有一个Activity设定为"main" action and "launcher" category。



说起Activity,就绕不开它的生命周期,这方面,已经有很多文章阐述了。呵呵。


Activity 生命周期是这样的:

1. Activity被创建时,首先调用 onCreate(). onStart().onResume().
之后进入正常运行状态。  此时,此Activity处于 屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

2.当某一透明Activity或对话框式的Activity抢占了焦点时,则调用 onPause().当焦点返回后,则再次调用onResume(),并返回正常运行状态。

3.当某一Activity抢占焦点,并导致咱们的Activity完全不可见时,(例如按下遥控器上的帮助)它会依次调用 onPause(),onStop()。当焦点返回后,(再按下返回)则依次调用 onRestart(), onStart(), onResume(). 并返回正常运行状态 
如果在Activity Stop状态下,按下遥控器上主菜单键,返回Lanucher, 则会调用 onDestory() . 


4. 当用户需要返回Lanucher时(例如按下遥控器上主菜单),则依次调用 onPause(),onStop(),onDestory().告知ActivityManager,此Activity已经完成任务。可以回收了。

但请注意:此时进程并没有死掉。 Android 程序员可以决定一个 Activity 的“生”,但不能决定它的“死”,也就时说程序员可以启动一个Activity,但是却不能手动的“结束”一个Activity。 


综上所述,Activity其实有四种状态:
  1. Active/Runing一个新Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
  2. Paused 当Activity 被另一个透明或者 Dialog 样式的 Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
  3. Stoped 当Activity 被另外一个 Activity覆盖、失去焦点并不可见时处于 Stoped状态。
  4. Killed Activity被系统杀死回收或者没有被启动时处于 Killed状态

Activity 栈

Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity的状态与它在栈中的位置关系如下图所示:
Android <wbr>Activity学习 <wbr><一> <wbr>Activity基础知识和生命周期

除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值