Android四大组件之一:Activity详解

转载 2015年07月08日 15:20:43

一、什么是activity

     Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。它是 android 应用程序的基本功能单元。Activity是单独的,用于处理用户操作, Activity 本身是没有界面的, 但activity类创建了一个窗口,可以通过setContentView(View)接口把UI放到activity创建的窗口上,用于显示View。既然Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。

 

二、activity生命周期

  

View Code
复制代码
public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);
 
protected void onStart();
 
protected void onRestart();
 
protected void onResume();
 
protected void onPause();
 
protected void onStop();
 
protected void onDestroy();

}
复制代码

由图可知:

在一个Activity正常启动过程中,这些方法调用的顺序是onCreate -> onStart -> onResume;在Activity结束的时候方法顺序是onPause -> onStop -> onDestroy,此为一个完整的生命周期。那么对于中断处理(比如电话来了),则是onPause -> onStop,恢复时onStart -> onResume;如果当前应用程序的是一个Theme为Translucent(半透明) 或者Dialog 的Activity那么中断就是onPause ,恢复的时候onResume。

下表更详细的介绍了生命周期函数的事项。

方法

描述

完成后可杀掉?

下一个

onCreate()

当activity被创建时调用。这是做一般的静态初始化的地方,比如创建界面,把数据绑定到列表,等等之类。这个方法会被传入一个Bundle对像,它包含了activity的上一次(关闭时)的状态(如果这个状态可以得到)。此方法后面永远跟着onStart()。

onStart()

onRestart()

在停止后被调用,但不是停止后马上调用,而是在再次开始前调用,也就是在再次调用onStart()之前立即调用。

onStart()

onStart()

当activity变成可见后立即调用它。如果activity成为最上层,则调用onResume(),如果完全被摭盖,就调用onStop()。

onResume()或onStop()

onResume()

当activity处于最上层时,立即调用此方法。此时activity获得输入焦点。后面跟着onPause()。

onPause()

onPause()

当另一个activity要进入Pause状态时调用此方法。这个方法一般是用来提交那些发生改变的永久化的数据们,停止动画和其它消耗CPU的玩意们。这些工作必须以最快的速度完成,因为在这个方法返回之前,另一个activity就不能进入resume状态。当它又回到最上层时,后面跟着onResume(),当它被完全摭盖时,后面跟着onStop()。

onResume()

or

onStop()

onStop()

当activity被完全摭盖时被调用。当activity要销毁时或被其它activity完全摭盖时都会发生。如果这个activity又回到最上层,则后面跟着onRestart(),如果它逝去了,则跟着onDestroy()。

onRestart()

or

onDestroy()

onDestroy()

在activity销毁之前被调用。这是activity能收到的最后一个调用。调用的原因可能是别人在这个activity上调用了finish(),也可能是系统为了更多的内存空间而把它所在的进程处死了。在这个方法中,可以调用isFinishing()来判断自己属于哪一种死法。

nothing

 

三、Activity 栈

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

 Activity 的状态与它在栈中的位置关系

如上所示,除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。

 

四、创建Activity

在 android 中创建一个 Activity 是很简单的事情,编写一个继承自 android.app.Activity的 Java 类并在 AndroidManifest.xml声明即可。下面是一个为了研究 Activity 生命周期的一个 Activity 实例:

Activity 文件:

 public class SampleActivity extends Activity { 
    private static final String LOG_TAG = SampleActivity.class.getSimpleName(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main); 
        Log.e(LOG_TAG, "onCreate"); 
    } 
   @Override 
    protected void onStart() { 
        Log.e(LOG_TAG, "onStart"); 
        super.onStart(); 
    } 
    @Override 
    protected void onResume() { 
        Log.e(LOG_TAG, "onResume"); 
        super.onResume(); 
    } 
    @Override 
    protected void onPause() { 
        Log.e(LOG_TAG, "onPause"); 
        super.onPause(); 
    } 
    @Override 
    protected void onStop() { 
        Log.e(LOG_TAG, "onStop"); 
        super.onStop(); 
    } 
    @Override 
    protected void onDestroy() { 
        Log.e(LOG_TAG, "onDestroy "); 
        super.onDestroy(); 
    } 
 }
AndroidManifest.xml 中通过 <activity> 节点说明 Activity,将 apk 文件安装后,系统根据这里的说明来查找读取 Activity,本例中的说明如下:
 <activity android:name=".SampleActivity" android:label="@string/app_name"> 
	 <intent-filter> 
		 <action android:name="android.intent.action.MAIN" /> 
		 <category android:name="android.intent.category.LAUNCHER" /> 
	 </intent-filter> 
 </activity>

一个<activity>元素也能指定多种intent filters--使用<inetent-filter>元素--为了声明其它应用程序可以激活它。

 

        你可以开启另一个activity通过startActivity(),传递一个Intent描述了你希望启动的Activity。Intent指定要么准备的activity你希望启动或描述你希望完成的动作。一个intent可以传输小量数据被启动的activity使用。你可以这么通过创建一个intent显示的定义你希望启动的activity,使用类名。例如,下面显示一个activity怎么启动另一个activity命名为SignInActivity:

  

       

 

Android 四大组件详解(一) Activity

对Activity的学习总结 主要介绍下面几点: 1.Activity的生命周期 2.Activity的启动方式 3.Activity一些细节的知识点...

Android四大组件之Activity详解

Activity生命周期: onCreate:在Acitivty第一次创建时调用,用于做初始化的工作 onStart:onCreate调用后调用,此次界面对用户来说无法看见 onRes...

深入剖析Android四大组件(一)——Activity生命周期详解

虽然如此,但即使你没有实现onSaveInstanceState()方法,也还是有一些Activity的状态通过Activity类默认实现的onSaveInstanceState()方法恢复。特别是,...

Android笔记---四大组件之Activity活动详解

Activity是所有程序的根本,所有程序的流程都运行在Activity 之中,Activity是由Android系统进行维护的,它的一个产生、运行、销毁即为一个生命周期,这里分别从以下4个方面记录学...
  • netdxy
  • netdxy
  • 2016年02月21日 19:01
  • 1765

笔记38 | Android四大组件之Activity的四种LauncherMode详解

launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task...

Android四大组件--Activity详解(二)

1、Task 和 启动模式Task在 SDK中关于Task,有一个很好的比方,说,Task就相当于应用(application)的概念。在开发人员眼中,开发一个Android程序,是做一个个独门独户的...

Android四大组件之——Activity的生命周期(图文详解)

Activity的生命周期: 一共有三种状态分别为运行状态、暂停状态、以及停止状态。 运行状态:当Activity在屏幕最前端(位于当前堆栈的顶部),他是可见的由焦点的,可以用来处理用户操作(点击,双...

Android四大组件之Activity详解

Activity是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android四大组件之一:Activity详解
举报原因:
原因补充:

(最多只允许输入30个字)