activity 生命周期有6个过程 onCreate(Bundle savedInstanceState) --》 onStart() --》onResume() --》onPause() --》onStop() -->onDestroy() 其中前3个 onCreate(Bundle savedInstanceState) --》 onStart() --》onResume() 为生命周期开始时调用,onPause() --》onStop() -->onDestroy() 为结束时调用。
当我们使用hone键时,activity 并没有调用 onDestroy() ,只是调用了 onPause() --》onStop() 并没有销毁该activity,也就是说当前的activity 还在内存中,其保存数据都没有被销毁,而回到程序则是调用了顺序为 onRestart()--》 onStart() --》onResume() 。当我们在activity跳转的时候 只要不调用this.finish() 或者System.exit(0)(这两个函数的区别网上有资料的,在这我就不多说了),也只是将程序停止了,而没有销毁。 而我们在点击返回键时,系统是调用了一个下面的函数:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
}
这个函数实际上也是调用了onDestory() 如果我们不想调用该方法的发,可以在将这个函数重写。
对于这个的周期我写了一个例子,各位可以看一下打出来的log日志,就能明白其调用的顺序了,代码如下:
package com.lifeCy.activity;
import android.app.Activity;
import android.os.Bundle;
public class LifeCyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("create");
}
@Override
protected void onDestroy() {
System.out.println("destroy");
super.onDestroy();
}
@Override
protected void onPause() {
System.out.println("pause");
super.onPause();
}
@Override
protected void onRestart() {
System.out.println("restart");
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
System.out.println("resume");
super.onResume();
}
@Override
protected void onStart() {
System.out.println("start");
super.onStart();
}
@Override
protected void onStop() {
System.out.println("stop");
super.onStop();
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
}
}
接下来要说的就是我们为什么要了解activity 的生命周期,对于很多开发者而言,使用的都是onCreate()方法初始话界面和数据,其他周期过程中的函数很少使用。那不多说我举一个例子吧,一个小函数:
public void test(){
new Thread(new Runnable() {
public void run() {
while(true){
System.out.println("stop me ");
}
}
}).start();
}
当这个线程在activity中启动的之后,在activity退出调用了 destroy方法,你依然可以从logcat 中 看到一直打印的log,打印log 还是小事,如果你写的是一个参数传递的函数的时候,当你下次启动,他又会启动一个新的线程,这样就会很麻烦。那怎么解决啦, 很简单,我们知道,每个activity终止的时候都会调用 onDestroy()这个方法,那么我们就在这个方法中去终止它,记住我试过终止线程如果你用的是interrupt(),那么很遗憾,我试过,log 还是会打印,停止不了,只能用stop()方法。而stop方法有是一个存在风险的方法。
所以一般我做这个的时候使用的是下面的方法:不是用true 而是使用一个变量,当需要时,它是一个为true的值,当不需要或activity 退出时,将它置为 false。代码如下:
private boolean index = true;
public void test(){
new Thread(new Runnable() {
public void run() {
while(index){
System.out.println("stop me ");
}
}
}).interrupt();
}
@Override
protected void onDestroy() {
this.index = false;//在这儿改变变量
super.onDestroy();
}
同理,当我们使用home键的时候,返回时,也可做一些操作。
最后,我觉得作为一个IT从业人员而言,光知道怎么用是不够的,必要的时候,也得了解一下它是怎么的构造和思想是怎么样的。 了解这些不仅对编程有用,而且还能学到一些编程思想,在日后的工作加以应用,这样有很大的提高。
本文中如果有什么不对 或这有疑问的地方,欢迎大家指出来,一起交流。