您的位置:首页 > 移动开发 > Android开发

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

2016-02-29 12:54 746 查看
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其实有四种状态:

Active/Runing一个新Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

Paused 当Activity 被另一个透明或者 Dialog 样式的 Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。

Stoped 当Activity 被另外一个 Activity覆盖、失去焦点并不可见时处于 Stoped状态。

Killed Activity被系统杀死回收或者没有被启动时处于 Killed状态

Activity 栈

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




除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: