Android四大组件之Activity


Activity是安卓中使用最多的一个组件,其用来显示界面,负责与用户的交互。Activity运行与主线程中,不可以在其中直接操作比较耗时的操作,如果超过5秒就会出现ANR,如果直接操作网络就会报错。使用时需要在manifest文件中注册,其继承关系为:Activity-->ContextThemeWrapper--->ContextWrapper--->Context.


生命周期:

直接启动:onCreate()-->onStart()-->onResume()--->onWindowFocuschanged();

启动后按back键:onPause()-->onWindowFocuschanged()--->onStop()-->onDestroy();

启动后按home键:onPause()-->onWindowFocuschanged()--->onStop();

按home键后重新进入:onRestart()-->onStart()-->onResume()-->OnWindowFocusChanged();

竖屏转横屏:onPause()-->onSaveInstanceState()-->onStop()-->onDestroy()-->onCreate()-->onStart()-->onRestoreInstanceState()-->onResume()-->onWindowFocusChanged();

横屏转竖屏:同上

一个Activity跳转到另一个Activity:onPause()-->onWindowFocusChanged()-->onSaveInstanceState()-->onStop();

然后按返回键:onRestart()-->onStart()-->onResume()-->OnWindowFocusChanged();

弹出一个Dialog:OnWindowFocusChanged();

销毁Dialog:OnWindowFocusChanged();


Activity的四种启动模式:

Standard:标准的启动模式,每调用一次Activity都创建一个新的实例。

SingleTop:如果跳转的Activity位于Task的顶部就不创建新的,否则创建新的实例。

SingleTask:创建一个实例,并且位于新的Task里面,再次调用就不会创建新的了。

SingleInstance:只有一个Activity实例,如果不在Task顶部就销毁上面的Activity,如果不存在就创建。



从一个Activity启动另一个Activity有两种启动方式,第一种是需要返回结果的,一种是不需要返回结果的,我看了源码,发现其实不需要返回结果的方法在底层也是调用的返回结果的,只是把请求码改为了-1,。

不需要返回结果的启动:

	Intent intent = new Intent(MainActivity.this, SecondActivity.class);
				intent.putExtras(bundle);
				startActivity(intent);

需要返回结果的:

	// bundle传数据,如果需要传对象,需要把对象实现Parcelable接口
				Bundle bundle = new Bundle();
				bundle.putBoolean("isRaining", true);
				// intent显示启动
				Intent intent = new Intent(MainActivity.this, SecondActivity.class);
				intent.putExtras(bundle);
				startActivityForResult(intent, 2);
然后重写onActivityResult()方法:

// 获取返回的数据
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		Log.e(TAG, data.getStringExtra("result"));

	}

在被启动的SecondActivity里面的代码如下:

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		boolean isRaining = getIntent().getExtras().getBoolean("isRaining", false);
		Log.e("SecondActivity", isRaining + "");
		Intent intent = new Intent(this, MainActivity.class);
		intent.putExtra("result", "你需要打伞");
		setResult(3, intent);
		finish();
	}

注意:如果需要传的数据是一个对象,只需要把这个对象实现Parcelable接口。


源码下载:Demo下载


你可能感兴趣的:(android,Activity,安卓四大组件)