Activity的生命周期:Activity对象从被创建,到被销毁的全过程。
Activity在运行过程当中可以出于以下三种状态:
1、运行状态:该状态表示Activity可见并且拥有用户焦点。
2、暂停状态:Activity A被Activity B覆盖,但Activity A可见,则Activity A处于暂停状态。
3、停止状态:如果Activity A被Activity B完全覆盖,或者由于用户点击Home按钮导致Activity A处于后台。那么Activity A就处于停止状态。
Activity生命周期中的回调函数
1、onCreate(Bundle savedInstance)
//当Activity第一次被创建时被系统回调
2、onRestart()
//当Activity从停止状态重新回到运行状态时被系统回调
3、onStart()
//当Activity对用户可见时被系统回调
(可视生命周期)
4、onResume()
//当Activity可以和用户进行交互时被系统回调
(4-6:前台生命周期)
5、onPause()
//当Activity不能与用户进行交互时被系统调用
6、onStop()
//当Activity完全不可见时被系统回调
7、onDestroy()
//当Activity被销毁时被系统回调
对于一个主Activity(MainActivity)和(TwoActivity(对话框的形式))
Main---onCreate
Main---onStart
Main---onResume
点击按钮(弹出对话框Activity):
Two---onpause
Two---onCreate
Two---onStart
Two---onResume
点击主页面(对话框Activity消失)
Two---onpause
Main---onResume
Two---onstop
Two---onDestory
点击Home键
Main---onpause
Main---onstop
再次点击
Main---onRestart
Main---onStart
Main---onResume
(注:如果在对话框出现时点击Home键
Two---onpause
Two---onstop
Main---onstop
再次进入
Main---onRestart
Main---onStart
Two---onRestart
Two---onStart
Two---onResume
)
4、生命周期回调函数的存在意义
在Activity的不同时期,系统会自动回调它的一系列回调函数。可以重写这些回调方法添加我们想要的行为。eg:当Activity处于停止状态,由于Android的一些特性,该Activity可能被系统销毁掉。因此,可以重写该回调方法,
添加我们自己的
数据保存代码等。
5、Activity状态保存(
系统内存不足或其他原因(屏幕翻转),会自动销毁该Activity,如果使用了下列的两个回调函数,当该Activity再次启动时,会自动调用下列两个回调函数,则原来的数据不会丢掉。)
必须重写状态保存和状态恢复的回调函数
onSaveInstanceState(Bundle outState)
//状态保存的回调函数
onRestoreInstanceState(Bundle savedInstanceState)
//状态恢复的回调函数
(注:Activity状态保存:界面中的控件有设置id号,系统会为我们自动保存其状态(CheckBox),所以状态保存是保存没有id的内容。)
屏幕翻转函数:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//竖屏
package com.fs;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("FS", "MainActivity-->onCreate()");
//默认的Toast
Toast.makeText(getApplicationContext(), "onCreate()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onStart() {
// TODO 待续...
super.onStart();
Log.e("FS", "MainActivity-->onStart()");
//自定义高度的Toast
Toast toast = Toast.makeText(getApplicationContext(),
"onStart()", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 150, 150);
toast.show();
Log.e("FS", "播放音乐--->你是我的小苹果...");
}
@Override
protected void onResume() {
// TODO 待续...
super.onResume();
Log.e("FS", "MainActivity-->OnReaume()");
//自定义带图片的Toast
Toast toast = Toast.makeText(getApplicationContext(), "onResume",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView = (LinearLayout) toast.getView();
ImageView imageCodeProject = new ImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.ic_launcher);
toastView.addView(imageCodeProject, 0);
toast.show();
}
@Override
protected void onPause() {
// TODO 待续...
super.onPause();
Log.e("FS", "MainActivity-->onPause()");
Toast.makeText(getApplicationContext(), "onPause()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onStop() {
// TODO 待续...
super.onStop();
Log.e("FS", "MainActivity-->onStop()");
Toast.makeText(getApplicationContext(), "onStop()",
Toast.LENGTH_SHORT).show();
Log.e("FS", "关闭《小苹果》的播放");
}
@Override
protected void onDestroy() {
// TODO 待续...
super.onDestroy();
Log.e("FS", "MainActivity-->onDestroy()");
Toast.makeText(getApplicationContext(), "onDestroy()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onRestart() {
// TODO 待续...
super.onRestart();
Log.e("FS", "MainActivity-->onRestart()");
Toast.makeText(getApplicationContext(), "onRestart()",
Toast.LENGTH_SHORT).show();
}
public void jump2Two(View v) {
startActivity(new Intent(this, TwoActivity.class));
}
}
<pre name="code" class="java">package com.fs;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
public class TwoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
Toast.makeText(getApplicationContext(), "onCreate()",
Toast.LENGTH_SHORT).show();
Log.e("FS", "2222222-->onCreate()");
}
@Override
protected void onStart() {
// TODO 待续...
super.onStart();
Log.e("FS", "2222222-->onStart()");
Toast.makeText(getApplicationContext(), "onStart()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
// TODO 待续...
super.onResume();
Log.e("FS", "2222222-->onResume()");
Toast.makeText(getApplicationContext(), "onResume()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onPause() {
// TODO 待续...
super.onPause();
Log.e("FS", "2222222-->onPause()");
Toast.makeText(getApplicationContext(), "onPause()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onStop() {
// TODO 待续...
super.onStop();
Log.e("FS", "2222222-->onStop()");
Toast.makeText(getApplicationContext(), "onStop()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onRestart() {
// TODO 待续...
super.onRestart();
Log.e("FS", "2222222-->onRestart()");
Toast.makeText(getApplicationContext(), "onRestart()",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
// TODO 待续...
super.onDestroy();
Log.e("FS", "2222222-->onDestroy()");
Toast.makeText(getApplicationContext(), "onDestroy()",
Toast.LENGTH_SHORT).show();
}
}
layout文件
<pre name="code" class="java"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:onClick="jump2Two"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳转界面" />
</RelativeLayout>
<pre name="code" class="java"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".TwoActivity" >
<TextView
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个界面" />
</RelativeLayout>