Android开发历程_3(Activity生命周期)
2012-07-29 16:19
316 查看
Activity中有7个与生命周期有关的函数。其中onCreated()是activity第一次被启动时执行的,主要是初始化一些变量,onRestart()是当前activity重新被启动时调用的;绑定一些监听器等;onStart()是activity界面被显示出来的时候执行的;onResume()是当该activity与用户能进行交互时被执行;onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。
当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。
Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。
这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。
每次启动一个activity,都会将activity对象压入栈Task中;应用程序永远显示的是栈的顶部的activity对象;Task里面的对象可以属于不同的应用程序;如果某个activity调用了finish()函数后,该activity就不会保留在Task内部了;因此当点击返回按钮时,就不会返回前面的activity了;
Task的作用是可以把不同应用程序的activity组织在一个栈内;
Task只有2个操作,压栈和入栈,没有插入和排序的功能;
发送短消息的activity是另一个应用程序,系统自带的,可以通过intent来调用;
在资源有限时,android操作系统会关闭一些它认为不太重要的activity(即应用程序被杀掉);
窗口风格的activity需要在AndroidManifiest.xml中进行窗口风格的设置,比如android:theme="@android:style/Theme.Dialog";
参考资料为mars老师的资料。
官方给出关于这7个生命周期的图如下:
下面这个实验是有2个activity,第1个activity中有一个按钮调用第2个activity,并且每个activity都重写了这7个生命周期函数,每个生命周期中打印出一条语句,以表示是是哪个activity在执行哪个生命周期函数。
实验过程当显示出了第1个activity后,单击Next Activity!按钮,这是会显示第2个activity,然后又按系统的返回键,返回第1个界面。
这时候打印出来的结果如下图所示:
由此可见,一开始程序运行时是首先调用第1个activity的onCreate(),onStart(),onResume()函数,然后按下button后,调用第1个activity的onPause(),和第2个activity的onCreate(),onStart(),onResume()函数,然后接着调用第1个activity的onStop(),当按下系统返回键时,这时会调用第2个activity的onPause(),接着是第1个activity的onRestart(),onStart(),onResume(), 最后是调用第2个的onStop()和onDestroy().
界面1如下所示:
界面2如下所示:
MainActivity.java:
SecondActivity.java:
当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。
Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。
这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。
每次启动一个activity,都会将activity对象压入栈Task中;应用程序永远显示的是栈的顶部的activity对象;Task里面的对象可以属于不同的应用程序;如果某个activity调用了finish()函数后,该activity就不会保留在Task内部了;因此当点击返回按钮时,就不会返回前面的activity了;
Task的作用是可以把不同应用程序的activity组织在一个栈内;
Task只有2个操作,压栈和入栈,没有插入和排序的功能;
发送短消息的activity是另一个应用程序,系统自带的,可以通过intent来调用;
在资源有限时,android操作系统会关闭一些它认为不太重要的activity(即应用程序被杀掉);
窗口风格的activity需要在AndroidManifiest.xml中进行窗口风格的设置,比如android:theme="@android:style/Theme.Dialog";
参考资料为mars老师的资料。
官方给出关于这7个生命周期的图如下:
下面这个实验是有2个activity,第1个activity中有一个按钮调用第2个activity,并且每个activity都重写了这7个生命周期函数,每个生命周期中打印出一条语句,以表示是是哪个activity在执行哪个生命周期函数。
实验过程当显示出了第1个activity后,单击Next Activity!按钮,这是会显示第2个activity,然后又按系统的返回键,返回第1个界面。
这时候打印出来的结果如下图所示:
由此可见,一开始程序运行时是首先调用第1个activity的onCreate(),onStart(),onResume()函数,然后按下button后,调用第1个activity的onPause(),和第2个activity的onCreate(),onStart(),onResume()函数,然后接着调用第1个activity的onStop(),当按下系统返回键时,这时会调用第2个activity的onPause(),接着是第1个activity的onRestart(),onStart(),onResume(), 最后是调用第2个的onStop()和onDestroy().
界面1如下所示:
界面2如下所示:
MainActivity.java:
package com.example.lifeone; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button)findViewById(R.id.next_activity); btn.setText(R.string.next_activity); System.out.println("first activity: onCreate()"); btn.setOnClickListener(new MyNextActivity()); } @Override protected void onDestroy() { System.out.println("first activity: onDestroy()"); super.onDestroy(); } @Override protected void onPause() { System.out.println("first activity: onPause()"); super.onPause(); } @Override protected void onRestart() { System.out.println("first activity: onRestart()"); super.onRestart(); } @Override protected void onResume() { System.out.println("first activity: onResume()"); super.onResume(); } @Override protected void onStart() { System.out.println("first activity: onStart()"); super.onStart(); } @Override protected void onStop() { System.out.println("first activity: onStop()"); super.onStop(); } class MyNextActivity implements OnClickListener { public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); MainActivity.this.startActivity(intent); } } }
SecondActivity.java:
package com.example.lifeone; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class SecondActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { System.out.println("second activity:onCreate()"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } @Override protected void onDestroy() { System.out.println("second activity: onDestroy()"); super.onDestroy(); } @Override protected void onPause() { System.out.println("second activity: onPause()"); super.onPause(); } @Override protected void onRestart() { System.out.println("second activity: onRestart()"); super.onRestart(); } @Override protected void onResume() { System.out.println("second activity: onResume()"); super.onResume(); } @Override protected void onStart() { System.out.println("second activity: onStart()"); super.onStart(); } @Override protected void onStop() { System.out.println("second activity: onStop()"); super.onStop(); } }
相关文章推荐
- Android—开发自学历程(1)-Activity(2)-生命周期
- Android开发笔记-------Activity生命周期
- Android开发笔记----Activity再学习(生命周期、启动模式、intent-filter)
- Android开发——Activity的生命周期
- 【Android开发学习笔记】【第六课】Activity的生命周期-下
- Android开发 第12-2课 Activity的生命周期
- 【Android开发学习笔记】【第六课】Activity的生命周期-下
- Android应用开发(二):Activity生命周期剖析以及如何启动新的Activity或网页
- Android 高级开发笔记 第一章 Activity的生命周期探索
- Android开发历程_1(从1个activity跳转到另一个activity)
- Android开发历程_1(从1个activity跳转到另一个activity)
- 【Android 开发】:Activity的生命周期 及 AndroidManifest.xml 文件详解
- 【Android 开发教程】Activity的生命周期
- Android开发历程_5(Activity相对布局)
- Android开发_Activity在屏幕旋转时的生命周期
- Android开发艺术探索阅读笔记之一:Activity的生命周期和启动模式
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
- android开发学习笔记(二)-activity的生命周期
- 3月16日,设备旋转与 activity 生命周期,Android 开发,每日20行,第7天。
- Android开发之Activity的生命周期以及加载模式