Activity是一个应用程序中的界面,承担着与用户交互的角色。在说Activity之前有必要先介绍一下Intent。
Intent是连接四大组件的纽带,分为显示意图和隐式意图.
显式意图:
在代码里面用intent设置要开启Activity的字节码 。应用场景: 自己应用程序开启自己的界面 推荐使用显示意图。效率很高。
隐式意图:
在代码里面设置intent的action和data,框架通过解析清单文件找到Activity然后开启 应用常见:开启别人应用程序的界面 隐式意图。 自己的某个界面,想让别的应用程序开启。
如何写显示意图:
Intent intent =new Intent();
intent.setClass(this,FirstActivity.class);
// intent.setClassName(this,"com.itheima.twointent.FirstActivity");
// intent.setClassName(getPackageName(),"com.itheima.twointent.FirstActivity");
startActivity(intent);
如何写隐式意图:
Intent intent =new Intent();
intent.setAction("com.itheima.open02");
// 红色的可以写, 也可以不写. 不写就会是默认的值
// intent.addCategory("android.intent.category.DEFAULT");
// intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("haha://"));
startActivity(intent);
需要在 清单文件中去注册声明组件的时候就去 配置 隐式意图.
<!-- 注意:一般在写一个activity 的时候, 如果是设置隐式意图
激活,通常都需要加上category,这个大家就 强制一下...-->
<activity android:name="com.lulu.twointent.SecondActivity">
<intent-filter>
<action android:name="com.lulu.open02"/>
<!-- 这个比较 特殊 , 一般配置隐式意图 的时候就需要写. 表示的 用在默认的设备中 (默认的运行在 手机中的). -->
<!-- <categoryandroid:name="android.intent.category.DEFAULT"/> -->
<data android:scheme="haha"/>
</intent-filter>
</activity>
entire lifetime完整生命周期
oncreate()-->onstart()-->onResume()->onpause-->onStop()-->onDestory();
visible lifetime可视生命周期
onStart()-->onResume()->onpause()-->onStop();
foreground lifetime前台生命周期
onResume()-->onPause()
默认情况下横竖屏切换先销毁再创建,
屏幕的朝向固定下来landscape横屏 portrait竖屏
让横竖屏切换的时候,Activity不敏感配置的变化。
在清单文件的对象activty配置的添加以下配置:
android:configChanges="orientation|keyboardHidden|screenSize"· standard的启动模式, 默认标准的启动模式。
绝大多数的Activity都是采用的standard的启动模式,开启新的Activity,这个Activity就会被加载到任务栈的栈顶。返回退出Activity,就从任务栈里面移除。如果任务栈清空,应用程序退出。 应用场景:绝大多数默认的情况。
· singleTop
顶部只有一个实例存在,如果这个Activity的实例已经被加入到任务栈的栈顶,这个Activity就不会被重新创建。应用场景:一个界面避免重复的开启很多次。singletop。 浏览器的书签
· singleTask
单一任务栈: 在任务栈里面只可以有1个实例存在 如果没有实例,就创建,加入到任务栈的栈顶, 如果有实例已经存在,就直接复用这个实例,然后清空这个实例上面所有的Activity。 应用场景: 如果一个Activity的内存开销或者是cpu开销非常大。一般我们设置这个Activity为singletask的启动模式。保证任务栈里面只有一个实例存在。 浏览器的BrowserActivity内存开销非常大。 webkit 浏览器的内核。 解析html标签。解析css标签。JavaScript解析引擎。
· singleinstance
前面的3种启动模式Activity都是运行在当前的应用程序默认任务栈里面。 singleinstance 自己单独开启一个任务栈运行。 在自己的单独的任务栈里面运行,整个手机操作系统里面只可能同时存在一个singleinstance实例的Activity。 应用场景: 有道词典,快速取词,通话界面