从网上下载一张经典的Activity生命周期图片
下面使用代码演示Activity的调用过程:
package demo.my.com.myapidemo.app.ui;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import demo.my.com.myapidemo.R;
/**
* Created by Hack on 2015/10/13.
*/
public class LifeCycleActivity extends Activity implements View.OnClickListener{
private static final String TAG = "apidemo";
private Context context = this;
private String param = "保存当前活动的参数";
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate called.");
setContentView(R.layout.leftcycle_activity);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart called.");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart called.");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume called.");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause called.");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop called.");
}
@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.putString("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.getString("param");
Log.i(TAG, "onRestoreInstanceState called. get param: " + param);
super.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn:
Intent intent = new Intent(LifeCycleActivity.this,HelloWorld.class);
startActivity(intent);
break;
default:
break;
}
}
}
xml文件:特别注释了一下gravity和layout_gravity的区别
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<!--gravity:属性是对该view中内容的限定.比如一个button 上面的text.
你可以设置该text 相对于view的靠左,靠右等位置.
layout_gravity:是用来设置该view相对与父view 的位置.
比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置. -->
<!--<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:layout_gravity="center_horizontal"
android:text="点击跳转到HelloWorld"/>-->
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="点击跳转到HelloWorld" />
</LinearLayout>
通过日志的打印来分析Activity的生命周期
1.启动Activity:
2:跳转到HelloWorld界面:
3:按返回键,重新回到跳转界面:
4:按返回键或手动结束进程
该程序中,把手机的自动转屏功能开启,旋转手机:
红色的框保存当前的界面参数
蓝色的框取得保存的参数