Android四大组件之Activity
2015-11-09 09:49
465 查看
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,。
不需要返回结果的启动:
需要返回结果的:
在被启动的SecondActivity里面的代码如下:
注意:如果需要传的数据是一个对象,只需要把这个对象实现Parcelable接口。
源码下载:Demo下载
生命周期:
直接启动: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下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- Android图片加载神器之Fresco-圆形圆角二合一[Java代码实现圆形圆角效果]
- RxAndroid
- Android开发之自定义控件(二)---onLayout详解
- android菜单动画
- Android自动朗读(TTS)
- Android布局优化
- Android学习路线指南
- Android自定义Animation动画
- Android studio教程:[4]真机测试
- Android 系统语言设置
- Android中View的绘制过程
- android studio 新建工程时提示资源文件出错
- Android之倒计时实现
- Android学习总结2
- android 中View的优化
- Android图片加载神器之Fresco-圆形圆角二合一教程[Java代码实现圆形圆角效果]
- Android Animation之补间动画
- 关于下拉刷新你是否真的非常理解还是只会搬砖?附 Android 实例子源代码文件下载地址380个合集
- android88 录音机