Android四大组件之Activity

来源:互联网 发布:威少上赛季每场数据 编辑:程序博客网 时间:2024/06/05 19:54


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()方法:

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

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

@Overrideprotected 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下载


0 0
原创粉丝点击