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

Android Activity及生命周期

2014-10-27 10:50 225 查看


第二篇技术文档来了解下Activity。

什么是Activity?

activity 是android最常见的组件,是android 四大常用组件之一。activity是人机交互的界面,每一个actiivty都表示一个屏幕,应用程序会把它呈现给用户,应用程序越负责,需要的屏幕越多。

Activity的生存期

每一个Activity的状态是由它在Activity栈中所处的位置所决定的,Activity栈是当前所有正在运行的Activity的先进后出的集合。

当一个新的Activity启动时,它就变为Activity状态,并被移动到栈顶。

如果用户使用返回键返回到了刚才的Activity或者当前Acivity被关闭了,那么栈中下一个Activity就会移动到栈顶,激活成活动状态。



Activity的状态

随着Activity的创建与销毁,在栈中移出移进会经历4个状态。



活动状态

当一个Actiivty位于栈顶的时候,它是可见的并且具有焦点的前台Activity。android将会不惜一切代价来保持它处于活动状态,并根据需要来销毁下面部分的Activity来保证这个Activity拥有它所需要的资源。

暂停状态

在某些情况下,activity是可见的,但是没有获得焦点,此时它就处于暂停状态。当一个透明或者非全屏的Activity位于该Activity之前时就是暂停状态。当Activity被暂停的时候,它仍然会被当作近似于活动状态的状态,

但是不能接收用户的输入事件。在极端的情况下,android也会终止暂停的Activity,为活动状态的Activity获取资源。

停止状态

当一个Activity不可见的时候,它就处于停止状态。此时Activity仍然会停留在内存中,保存所有的状态信息,然而android系统在其他地方需求使用内存的时候,它就会成为首要的候选对象。在一个Activity停止的时候,

保存数据和当前的UI状态以及停止任何关键操作都是很重要的。

非活动状态

当一个Activity被终止之后,在启动它之前它就处于非活动状态。处于非活动状态的Activity已经从Activity栈中移除了,因此在他们可以被显示和使用之前,需要被重新启动。

状态的转化是非确定性的,完全由android内存管理器处理。Android首先会关闭包含非活动状态Activity的应用程序,接着是停止的应用程序。只有极端情况下,才会销毁暂停的应用程序。

Activity的生命周期

为了保证Activity可以对状态改变做出反应,Android提供了一系列时间处理程序,当Actiivty在完整的,可见的和活动的生存期之间转化时,它们就会被触发。



了解一个应用的生命周期,最好手动实践一下

package com.example.activitytest;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

private static final String TAG = "testActivity";

private Button button;

// activity 创建初始调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate() called.");

// TODO 初始化一个Activity 并且填充UI

button = (Button) findViewById(R.id.button);

button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

startActivity(new Intent(MainActivity.this,
TranslucentActivity.class));

}
});
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState() called.");

// TODO Activity被系统杀死后再重建时被调用.
// 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
// 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
}

// 当activity 从停止状态到活动状态调用
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart() called.");
}

// 当activity创建或者从停止状态到活动状态调用
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart() called.");
}

// 当activity创建或者从停止状态到活动状态调用
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume() called.");
}

// 当activity处于暂停状态的时候 调用
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState() called.");
}

// 当activity处于暂停状态的时候 调用
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause() called.");

//TODO 在onPause方法中也可能进程会被终止所以有必要的花  也要保存所有的编辑或者状态改变
}

// 退出当前Activity或者跳转到新Activity时被调用
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop() called.");

// TODO 挂起不需要的UI更新,线程或处理
// 当activity不可见时,保存所有的编辑或者状态改变,因为在调用这个方法后,进程可能会被终止
}

// 退出当前Activity时被调用,调用之后Activity就结束了
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onStop() called.");

// TODO 清理所有的资源,包括线程 关闭数据库连接等
}

}


当项目刚启动的调用的是 onCreate() > onStart() > onResume() ,退出Actiivty调用的是onPause()>onStop()>onDestory()方法,结束当前Activity。

点击home键,Activity处于停止状态 调用的是onPause()>OnSaveInStanceState()>onStop(), 从停止状态返回到活动状态 调用的是onRestart()>onStart()>OnResume()

启动一个透明的Activity 当前activity处于暂停状态 调用的是OnPause>OnSaveInStanceState(),从暂停的状态返回到活动状态 调用的是OnResume()

当前Activity处于暂停状态或者停止状态,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate() > onStart() > onResume()。

参考书:Android 4 高级编程第三版

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