Android 四大组件之Activity

一、Activity概念介绍:


(1)Android组件显示的载体,负责与用户交互,监听各个组件的操作事件并作出相应事件的响应。


二、Activity生命周期流程图:


(1)引用Android官方文档生命周期流程图:

三、Activity生命周期中常用回调方法:


(2)官方只是提供了大概的基本流程,具体细节我通过具体代码测试并结合网上查阅资料总结如下两点:


1、以下几种情况下Activity生命周期的流程:
<span style="font-family:Microsoft YaHei;font-size:14px;">/**
	 * 生命周期:
	 * 
	 * 第一种情况---->正常启动
	 * onCreate()--->onStart()--->onPostCreate()--->onResume()--->onPostResume()
	 * 
	 * 第二种情况---->黑屏之后(和按home键回到主界面一样) onPause()--->onStop()
	 * 
	 * 第三种情况---->恢复屏幕之后 onRestart()--->onStart()--->onResume()--->onPostResume()
	 * 
	 * 第四种情况---->按返回键退出应用 onPause()--->onStop()--->onDestroy()
	 * 
	 * 第五种情况---->进入下一个界面 onPause()--->onStop()
	 * 
	 * 第六种情况---->返回原来界面 onRestart()--->onStart()--->onResume()--->onPostResume()
	 * 
	 * 第七种情况---->旋转屏幕(默认旋转屏幕会发生以下调用并restart该activity
	 * 但可通过设置activity的属性android:configChanges="orientation" 来告知屏幕旋转不发生restart行为
	 * 详细看 android:configChanges 属性文档说明)
	 * onPause()--->onStop()--->onDestroy--->()
	 * --->onCreate()--->onStart()--->onPostCreate()--->onResume()--->onPostResume()
	 * 
	 * 第八种情况---->打开dialog主题的窗体 onPause()--->onSaveInstanceState()
	 * 
	 */</span>

2、在Activity生命周期中的回调方法中我们具体应该做点什么:
<span style="font-family:Microsoft YaHei;font-size:14px;">// (1)初始化入口方法
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.mainactivity);

		Log.i("1", "---------->onCreate");

		// 本方法应用场景:本方法中主要实现 界面基本布局初始化、界面基本数据初始化
		initTheLayoutOfActivity();
		initTheDataOfActivity();

		nextButton = (Button) findViewById(R.id.next);
		nextButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				Log.i("3", "---------->进入下一个界面");

				// 可以传递intent到下一个界面
				Intent intent = new Intent(MainActivity.this,
						SecondActivity.class);
				intent.putExtra("name", "张三");
				// startActivity(intent);
				startActivityForResult(intent, 2);

			}
		});

	}

	/**
	 * 初始化布局界面
	 * 
	 * @since 2014年11月6日 下午3:21:12
	 * @作者 GAVIN
	 */
	public void initTheLayoutOfActivity() {

	}

	/**
	 * 初始化基础数据
	 * 
	 * @since 2014年11月6日 下午3:21:29
	 * @作者 GAVIN
	 */
	public void initTheDataOfActivity() {

	}

	// (2)开始显示界面调用或者当当前Activity从stop状态变为active状态时调用onRestart()之后调用
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();

		Log.i("1", "---------->onStart");
	}

	// (3)本方法主要在Activity加载完成后调用 在这个方法里面可以获取界面的宽高等数据
	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onPostCreate(savedInstanceState);</span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="white-space:pre">		</span>//本方法可以再Activity加载完成后获得一些UI布局控件的宽度等数值
		Log.i("1", "---------->onPostCreate");
	}

	// (4)当当前Activity从pause状态变为Active状态时调用
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i("1", "---------->onResume");
	}

	// (5)
	@Override
	protected void onPostResume() {
		// TODO Auto-generated method stub
		super.onPostResume();
		Log.i("1", "---------->onPostResume");
	}

	// (6)当当前Activity从Active状态变为Pause状态时调用
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		// 在本方法中进行保存当Activity退出后用户界面的关键数据,防止系统回收内存造成数据丢失
		super.onPause();
		Log.i("1", "---------->onPause");
	}

	// (7)当当前Activity完全被遮挡对于用户来说不可见时调用(内存不足时有可能被系统kill)
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i("1", "---------->onStop");
	}

	// (8)当前Activity被系统回收时调用(表明此时Activity被终结)
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i("1", "---------->onDestroy");
	}

	// (9)当当前Activity从Stop状态变为active状态时调用
	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.i("1", "---------->onRestart");
	}</span>

四、Activity应用场景:


(1)作为界面控件显示的载体,Activity应用于Android程序的各个界面,贯穿整个应用程序。

五、Activity常用方法介绍:


(1)打开一个Activity的两种方法:

// 可以传递intent到下一个界面
				Intent intent = new Intent(MainActivity.this,
						SecondActivity.class);
				intent.putExtra("name", "张三");
				//第一种方法:一个参数   目的:只是单纯的打开另一个视图 操作完成后,返回本界面还需要在二级界面使用startActivity方法
				// startActivity(intent);
				//第二种方法:两个参数或者三个参数 目的:需要二级界面返回一定数据进行其它操作,返回本界面只需要二级界面中使用 setResult()方法后调用finish()方法
				startActivityForResult(intent, 2);
//				startActivityForResult(intent(目的意图), requestCode(请求的code值,用于区分当前发起事件的Activity是哪个));
//				startActivityForResult(intent, requestCode, options(可选,传递一些数据));
</pre><strong>(2)当使用startActivityForResult(intent, "requestCode", "bundle")打开一个界面,接收回调数据时调用如下方法:</strong></div><div><span style="font-family:Comic Sans MS; font-size:18px"><strong></strong></span><pre name="code" class="java"><strong>@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		// 此方法用于接收上一个Activity返回的数据
		if (requestCode == 1) {
			switch (resultCode) {
			case RESULT_OK:
				Log.i("1", "i get it !!");
				break;

			default:
				break;
			}
		} else {
			Log.i("1", "期待新功能");
		}

	}</strong>
(3)onSaveInstanceState()调用情景:

// 这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity
// A是否会被销毁,故系统会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据。</strong>
//以下几种情况的分析都遵循该原则
//1、当用户按下HOME键时。
//2、长按HOME键,选择运行其他的程序时。
// 3、按下电源按键(关闭屏幕显示)时。
// 4、从activity A中启动一个新的activity时。
// 5、屏幕方向切换时,例如从竖屏切换到横屏时,在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity// A,所以onSaveInstanceState一定会被执行
 // 此方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,</strong>
//而不应该用来保存持久化数据,持久化数据应该当用户离开当前的
// activity时,在 onPause()
// 中保存(比如将数据保存到数据库或文件中)
// 在onPause()中不适合用来保存比较费时的数据,如果数据量大就应该开一个线程来进行操作</strong>
@Overrideprotected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
Log.i("1", "onSaveInstanceState");
}



 
 (4)Activity常用主题(theme)样式: 
/**
	 * Android Activity 主题样式 常用的有以下几种
	 * 
	 * android:theme="@android:style/Theme.Dialog" 将一个Activity显示为对话框模式
	 * android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
	 * android:theme="@android:style/Theme.NoTitleBar.Fullscreen"不显示应用程序标题栏,并全屏 ?
	 * android:theme="@android:style/Theme.Light" 背景为白色
	 * android:theme="@android:style/Theme.Light.NoTitleBar" 白色背景并无标题栏
	 * android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
	 * android:theme="@android:style/Theme.Black" 背景黑色 
	 * android:theme="@android:style/Theme.Black.NoTitleBar"黑色背景并无标题栏 
	 * android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏
	 * android:theme="@android:style/Theme.Wallpaper" 用系统桌面为应用程序背景
	 * android:theme="@android:style/Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
	 * android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"用系统桌面为应用程序背景,无标题栏,全屏 
	 * android:theme="@android:style/Translucent"
	 * android:theme="@android:style/Theme.Translucent.NoTitleBar"
	 * android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
	 * android:theme="@android:style/Theme.Panel" ?android:theme="Theme.Light.Panel"
	 */






程序猿群英汇:


Android      学习交流群:322494132

IOS          学习交流群:226881076

Swift         学习交流群:199157150

Voip for ios 学习交流群:213493886



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值