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

Android四大组件之一:Activity详解

2015-07-08 15:20 591 查看
一、什么是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 {
priva
4000
te 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:

  


       


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: