很长一段时间没有写博客,懒,感慨一下。

Activity的生命周期是一块以下附图:

通过代码下面简单的介绍一下。一些内容看代码的凝视:

package com.mxy;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button; /**
* http://blog.csdn.net/liuhe688/article/details/6733407
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入执行状态。
2.当前Activity被其它Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入执行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏。自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入执行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足。杀死当前Activity。而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法。进入执行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。 * @author mxy
*
*/ public class MainActivity extends Activity { private static final String TAG = "mxy";
private Context context = this;
private int param = 1; //Activity创建时被调用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate called."); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, TargetActivity.class);
startActivity(intent);
}
});
} //Activity创建或者从后台又一次回到前台时被调用
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart called.");
} //Activity从后台又一次回到前台时被调用
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart called.");
} //Activity创建或者从被覆盖、后台又一次回到前台时被调用
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume called.");
} //Activity窗体获得或失去焦点时被调用,在onResume之后或onPause之后
/*@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.i(TAG, "onWindowFocusChanged called.");
}*/ //Activity被覆盖到以下或者锁屏时被调用
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause called.");
//有可能在执行完onPause或onStop后,系统资源紧张将Activity杀死,所以有必要在此保存持久数据
} //退出当前Activity或者跳转到新Activity时被调用
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop called.");
} //退出当前Activity时被调用,调用之后Activity就结束了
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestory called.");
} /**
* Activity被系统杀死时被调用.
* 比如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死.
* 另外,当跳转到其它Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态.
* 在onPause之前被调用.
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("param", param);
Log.i(TAG, "onSaveInstanceState called. put param: " + param);
super.onSaveInstanceState(outState);
} /**
* Activity被系统杀死后再重建时被调用.
* 比如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
* 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
param = savedInstanceState.getInt("param");
Log.i(TAG, "onRestoreInstanceState called. get param: " + param);
super.onRestoreInstanceState(savedInstanceState);
} //当指定了android:configChanges="orientation|keyboardHidden"后,方向改变时onConfigurationChanged被调用
// 这里仅仅是指定orientation 不起作用
//假设<activity>配置了android:screenOrientation属性。则会使android:configChanges="orientation"失效。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i(TAG, "onConfigurationChanged called.");
switch (newConfig.orientation) {
case Configuration.ORIENTATION_PORTRAIT:
setContentView(R.layout.activity_main);
break;
case Configuration.ORIENTATION_LANDSCAPE:
setContentView(R.layout.activity_main);
break;
}
} }

样例project的下载地址:http://download.csdn.net/detail/mengxiangyue/7254175

版权声明:本文博客原创文章,博客,未经同意,不得转载。

最新文章

  1. 畅通工程续——E
  2. 将request.getParameterMap()转换成可操作的普通Map
  3. Oracle小数点格式化
  4. vb.net机房收费系统之组合查询
  5. SpringMVC之ModelAndView的简单使用
  6. 架设WIN32汇编程序的开发环境
  7. js数组,字符串常用方法汇总(面试必备)
  8. 防盗链与token运用
  9. H5WebSocket消息推送
  10. Gradle打jar包命令
  11. wpf 事件
  12. (转载)python: getopt的使用;
  13. Nginx配置实际案例
  14. jquery+jquery.rotate实现图片旋转效果
  15. Spark练习代码
  16. Vue.js用脚手架创建项目
  17. vue中的前置守卫
  18. ubuntu16.04 nginx安装
  19. .NET:CLR via C# Thread Basics
  20. 一些baidu面经

热门文章

  1. 使用ionic3快速开发webapp(一)
  2. Vue.js开发环境搭建的介绍
  3. rabbitMQ服务安装
  4. #308 (div.2) B. Vanya and Books
  5. js进阶正则表达式6转义字符(加\转义)(.符号)(|符号)
  6. 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)
  7. Android JNI -基础篇
  8. DOM 的classList 属性
  9. unresolved external symbol __forceAtlDllManifest错误的解决
  10. html常用属性border-radius、linear-gradient怎么使用