Android Activity生命周期介绍
发布时间:2021-12-15 11:25:20 所属栏目:教程 来源:互联网
导读:今天通过实例方法系统的看了一下activity的声明周期。就是把整个过程的状态log出来。或者通过对话框显示出来。 源代码贴出来: 注:另一个activity的代码没有贴,大家随便写。注意activity的注册 package com.yelbosh.test; import com.yelbosh.test.classes
今天通过实例方法系统的看了一下activity的声明周期。就是把整个过程的状态log出来。或者通过对话框显示出来。 源代码贴出来: 注:另一个activity的代码没有贴,大家随便写。注意activity的注册 package com.yelbosh.test; import com.yelbosh.test.classes.MyButton; import Android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.support.v4.app.NavUtils; import android.webkit.*; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private AlertDialog.Builder builder; private int count=0; private final String TAG = "log"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn1 = (Button)findViewById(R.id.button1); builder = new AlertDialog.Builder(this); builder.setMessage("你确定这么做吗亲?"). /** * 肯定的按钮函数 */ setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }). /** * 否定的按钮函数 */ setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); builder.setMessage("OnCreate" + (count++)); builder.create().show(); Log.i(TAG,"oncreate"); btn1.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub /** * 通过dialog的builder来构造窗口 */ Intent intent = new Intent(); intent.setClass(MainActivity.this, SubActivity1.class); startActivity(intent); } }); } /** * 当activity变得对用户可见的时候被调用 */ @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); builder.setMessage("onStart" + (count++)); builder.create().show(); Log.i(TAG,"onstart"); } /** * 当activity变得对用户不可见的时候被调用 */ @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); builder.setMessage("onStop" + (count++)); builder.create().show(); Log.i(TAG,"onstop"); } /** * 当界面准备和用户交互的时候被调用 */ @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); builder.setMessage("OnResume" + (count++)); builder.create().show(); Log.i(TAG,"onresume"); } /** * 当系统准备创建另一个屏幕的时候被调用 */ @Override protected void onPause(){ //TODO Auto-generated method stub super.onPause(); builder.setMessage("onPause" + (count++)); builder.create().show(); Log.i(TAG,"onpause"); } /** * 当activity被销毁的时候被调用 */ @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); builder.setMessage("onDestroy" + (count++)); builder.create().show(); Log.i(TAG,"ondestroy"); } /** * 当activity被再次调用的时候被调用 */ @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); builder.setMessage("onRestart" + (count++)); builder.create().show(); Log.i(TAG,"onrestart"); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 执行结果,除了logcat的整个过程之外,通过对话框也可以看出整个过程。 当程序的第一个activity开始和用户交互之前,分别依次执行onCreate方法(创建activity),onStart方法(变得可见),onResume方法(开始交互) 然后这个时候点击跳转的按钮,会依次执行onPause方法(程序准备创建目标activity),onStop方法(先前的activity变得不可见), 这个时候已经跳转到目标activity了,这个时候按下返回键,这个时候会调用先前的activity的onRestart方法(当重新返回这个activity的时候),然后onstart,onresume。 不过话又说回来了,目标activity的创建过程是在什么时候创建的呢?由于先前的onPause方法是在准备创建目标activity之前调用的,所以我们猜测onCreate方法是在onPause方法之后调用的。那么其他方法呢?还是log出来吧,log出来之后,发现目标activity的onresume方法(包括onResume)之前的过程都是在原先的activity的onPause和onStop方法之间调用的,这也意味着,当目标activity创建完毕并且准备和用户交互的时候,先前的activity才会变得不可见。 至此,我们的理解确实又上了一个层次了 ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |