android activity 生命周期简介

本文详细解析了Android中Activity的生命周期,包括6个关键阶段,并通过示例代码展示了不同生命周期回调方法的应用场景。此外,还介绍了如何在Activity的不同状态间正确管理资源,避免内存泄漏等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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从业人员而言,光知道怎么用是不够的,必要的时候,也得了解一下它是怎么的构造和思想是怎么样的。 了解这些不仅对编程有用,而且还能学到一些编程思想,在日后的工作加以应用,这样有很大的提高。

本文中如果有什么不对 或这有疑问的地方,欢迎大家指出来,一起交流。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值