Android学习第六天之组件篇初探Activity1.1

一:导读

       Android应用程序由四大组件构成最基本的框架,分别是Activity,Service,BroadcastReceiver和Content Provider,而在组件和程序之间进行消息传递则使用Intent。同时,针对线程之间的信息传递也提出了自己的通信机制。其中,Activity是最重要也是使用频率最高的组件。一个Activity通常是一个单独的全屏显示界面,在其中有若干视图控件以及对应的事件处理。大部分应用程序都包含了多个Activity,当多个Activity相互跳转切换时,就形成一个Activity栈,以及Activity之间的数据交换。

二:Activity生命周期

(1.1)图解分析:


onCreate()方法:在创建Activity时被调用。该方法是最常见的方法,每个活动中我们都重写了这个方法。在Eclipse中创建Android项目时,会自动创建一个Activity,在该Activity中,默认重写了onCreate(Bundle savedInstanceState)方法,用于该Activity执行初始化。你应该在这个方法中完成活动的初始化操作,比如说加载布 局、绑定事件等

onStart()方法:这个方法在活动由不可见变为可见的时候调用。 

onResume()方法:当Activity由暂停状态恢复为活动状态时调用。调用该方法后,该Activity位于Activity栈的栈顶,并且处于运行状态(可见状态)。

onPause()方法:暂停Activity时被回调,该方法需要被非常快速的执行,因为直到该方法执行完毕后,下一个Activity才能被恢复。在该方法中,通常用于持久保持数据:我们通常会在这个方 法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度 一定要快,不然会影响到新的栈顶活动的使用。例如,当我们正在玩游戏时,突然来了一个电话,这时就可以在该方法中将游戏状态持久保存起来。

onStop()方法:停止Activity时被回调,即在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如 果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop() 方法并不会执行。

onDestroy()方法:这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。

onRestart()方法:这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。 以上七个方法中除了 onRestart()方法,其他都是两两相对的。

二:实例测试探究

下面做一个实例进行测试:创建两个Activity(MainActivity和ActivityTwo)分别重写上述方法。给MainActivity添加按钮并实现点击事件(跳转到ActivityTwo)。

 MainActivity.java

package com.example.activitytest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity {
	private Button btnButton;
	

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnButton = (Button)findViewById(R.id.btnButton);
        btnButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this,ActivityTwo.class);
				startActivity(intent);
			}
		});
        Log.e("TAG", "MainActivity onCreate() method is executed");
    }
    
    
    @Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.e("TAG", "MainActivity onStart() method is executed");
	}
    
    @Override
    protected void onRestart() {
    	// TODO Auto-generated method stub
    	super.onRestart();
    	Log.e("TAG", "MainActivity onRestart() method is executed");
    }
    
    @Override
    protected void onPause() {
    	// TODO Auto-generated method stub
    	super.onPause();
    	Log.e("TAG", "MainActivity onPause() method is executed");
    }
    
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	Log.e("TAG", "MainActivity onResume() method is executed");
    }
    
    @Override
    protected void onStop() {
    	// TODO Auto-generated method stub
    	super.onStop();
    	Log.e("TAG", "MainActivity onStop() method is executed");
    }
    
    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	super.onDestroy();
    	Log.e("TAG", "MainActivity onDestroy() method is executed");
    }


}
ActivityTwo.java

package com.example.activitytest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;


public class ActivityTwo extends Activity {
	

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        Log.e("TAG", "ActivityTwo onCreate() method is executed");
    }
    
    @Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.e("TAG", "ActivityTwo onStart() method is executed");
	}
    
    @Override
    protected void onRestart() {
    	// TODO Auto-generated method stub
    	super.onRestart();
    	Log.e("TAG", "ActivityTwo onRestart() method is executed");
    }
    
    @Override
    protected void onPause() {
    	// TODO Auto-generated method stub
    	super.onPause();
    	Log.e("TAG", "ActivityTwo onPause() method is executed");
    }
    
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	Log.e("TAG", "ActivityTwo onResume() method is executed");
    }
    
    @Override
    protected void onStop() {
    	// TODO Auto-generated method stub
    	super.onStop();
    	Log.e("TAG", "ActivityTwo onStop() method is executed");
    }
    
    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	super.onDestroy();
    	Log.e("TAG", "ActivityTwo onDestroy() method is executed");
    }


}

运行程序,显示界面如下图


查看log显示如下


可以看出 MainActivity分别执行了onCreate() ,onStart(),onResume()方法。此时MainActivity处于显示状态。

然后,我点击按钮startActivityTwo

界面如下:


查看log


可以看出 ,MainActivity执行了onPause()方法后,ActivityTwo执行了onCreate() ,onStart(),onResume()方法,紧接着MainActivity执行了onStop()方法此时MainActivity处于不可见状态(暂停)状态,ActivityTwo处于可见状态。

下一步,点击back(返回)键,显示界面如下:


查看log


可以看出

ActivityTwo执行了onPause()方法后,MainActivity执行了onRestart(),onStart(),onResume()方法,紧接着ActivityTwo执行了onStop(),onDestroy()方法。此时,ActivityTwo处于销毁状态,MainActivity处于可见状态。

最后点击back(返回)键,程序完全退出,界面如下


依旧查看log


可以看出MainActivity处于销毁状态,至此,两个Activity的生命周期结束。

三:总结分析结果

(一)当一个Activity第一次被创建时,依次执行onCreate() ,onStart(),onResume()方法,此时Activity处于可见状态。

(二)当一个Activity(例如MainActivity)被另一个Activity(例如ActivityTwo)给覆盖了,此时Activity(MainActivity))的onPause()方法会被立即执行,Activity(MainActivity)处于暂停状态,当其他的Activity(ActivityTwo)被创建且处于可见状态后,暂停状态的Activity(MainActivity)会执行onStop ()进入停止状态。即:MainActivity不可见状态。特别的,当此时的Activity被一个Dialog覆盖,这时的Activity并不是完全不可见,而是显示在dialog的后面,变得失去了焦点。所以这时的Activity处于暂停状态,而不是停止状态。只执行onPause()方法,不会执行onStop()方法。

(三)当其他Activity(ActivityTwo)销毁或者暂停(即:处于不可见状态),此时的Activity(MainActivity)会执行onRestart()方法(因为之前已经创建了,所以这里并不需要重新创建,只要重新启动即可),然后执行onStart(),onResume()方法(看最上面的定义即可)。MainActivity处于可见状态。特别的,如果是由于dialog引起的暂停状态要恢复到可见状态,那么这里也不会执行onRestart()方法,因为Activity没用停止,只是暂停了而已,所以不需要重新启动的。直接执行onStart(),onResume()方法即可。

(四)当一个Activity(MainActivity)完全销毁。会依次执行,先不可见onPause(),onStop(),再销毁onDestroy()方法,即先暂停后停止最后销毁。

结论:

可见状态:onCreate() ,onStart(),onResume()  

不可见状态:onPause(),onStop ()  

销毁状态 :onDestroy()








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值