四大组件是什么
目录
一.activity
生命周期图
1.一个Activity通常就是一个独立的窗口,Activity各种情况下的生命周期
①正常情况的生命周期
onCreate –>onStart–>onResume–>onPause–>onStop–>onDestory
②横竖屏切换的时候
如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity就会被销毁并重新创建
在Activity中添加android:configChanges="orientation|keyboardHidden|screenSize"
属性可以避免Activity生命周期被回调
③Activity上弹出Dialog,弹出时然后按Home键时的生命周期
Activity上弹出Dialog:onCreate–>onStart–>onResume
当启动和退出Dialog时,Activity的状态始终未变,,因为Dialog实际上时一个View,它是属于某一个Activity的,因此如果Dialog显示在当前Activity之前时不会影响到Activity的生命周期的
dialog弹出时按Home键:onPause–>onStop
整个流程如下:
④前台切换到后台,然后再回到前台,Activity生命周期回调方法。
⑤两个Activity 之间跳转
MainActivity 和 DragActivity
MainActivity 经历的周期:onCreate–>onStart–>onResume–>onPause–>onStop–>onRestart–>onStart–>onResume
DragActivity 经历的周期:onCreate–>onstart–>onResume–>onPause–>onStop–>onDestory
2.Activity之间的通信方式
startActivity
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);
startActivityForResult
Intent intent = new Intent(getContext(), PresentManageActivity.class);
intent.putExtra(PresentManageActivity.KEY_START_NUM, mStartNum);
startActivityForResult(intent, RequestCode.REQUEST_CODE_GIFT);
LocalBroadcastReceiver
3.android应用中的每个Activity都应该在AndroidManifest.xml配件文件中声明,否则系统将不识别也不执行该Activity
4.活动被回收,Activity状态保存于恢复
Activity提供了onSaveInstanceState()回调方法,这个方法可以保证在活动回收之前被调用,
onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一些方法用于保存数据
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("data", "保存数据");
}
保存的数据在onCreate()方法中可获取
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null){
String data = savedInstanceState.getString("data");
}
}
5.Activity的四种启动模式对比
①Standard:系统默认的启动模式,每次启动一个activity都会创建一个新的实例,不管这个实例是否存在
②SingleTop:栈顶复用模式,如果activity已经在任务栈的栈顶了,当再次启动同一个activity的时候,这个activity不会被重新创建,而且它的onNewIntent()方法会被调用
适合接受通知启动的内容页面,例如:某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
③SingleTask:栈内复用模式,只要activity存在栈内,那么多次启动activity都不会重新创建实例,再次启动时该实例被移到栈顶,系统会调用它的onNewIntent()方法
适合做程序的入口点,例如浏览器的主界面,不管从多少个应用启动浏览器,只会启动主界面一次,其余的情况都走onNewIntent,并且会清空主界面上面的其他页面
④SingleInstance:此模式的activity只能单独位于一个任务栈中,
*适合需要与程序分离的页面
例如:闹铃提醒,将闹铃提醒与闹铃设置分离*