Android Activity基础知识:
1. 生命周期
Dialog、PopupWindow、Toast遮盖不会触发生命周期方法
2. 启动模式
launchMode一共有4种:
standard: 每次创建一个新的Activity
singleTop: 当前Activity是否在栈顶,如果不是栈顶就重新创建一个,否则无需创建
singleTask:所有Task仅一个,杀死上面所有Activity
singleInstance:单独一个新Task,且仅有一个Activity
3. 状态保存于恢复
4. 启动方式
5. Activity、Window、View之间的关系
Activity -(attach new Window)- PhoneWidow -(setContentView)- View
为什么要有Window?提供多层窗口?
6.
ServiceManager.get("Activity");
ActivityManagerNative.getDefault();
Activity通常是学习Android写demo时遇到的第一个类,知名程度可以与经典的打印“Hello World”相媲美,毕竟在Android中即使想在界面上显示一个“Hello World”,也必须先创建Activiy子类在其onCreate方法中创建视图,在视图上添加文字“Hello World”。哈哈,接下来就来看看Android 的四大组件使用频率最高的Activity吧。
一、Activity是什么?
二、Activity的生命周期
http://developer.android.com/training/basics/activity-lifecycle/index.html
Starting an Activity
http://developer.android.com/training/basics/activity-lifecycle/starting.html
Pausing and Resuming an Activity
http://developer.android.com/training/basics/activity-lifecycle/pausing.html
Stopping and Restarting an Activity
http://developer.android.com/training/basics/activity-lifecycle/stopping.html
Recreating an Activity
http://developer.android.com/training/basics/activity-lifecycle/recreating.html
三、状态保存和恢复
oncreate(Bundle) - 官方推荐
四、启动方式
一个Activity打开另外一个Activity整体有两种启动方式:显示启动、隐式启动1. 显示启动
// 第一种显示启动方式
Intent intent = new Intent(ThisActivity.this, OtherActivity.class);
startActivity(intent);
// 第二种显示启动方式
Intent intent = new Intent();
intent.setClass(ThisActivity.this, OtherActivity.class);
startActivity(intent);
// 第三种显示启动方式
Intent intent = new Intent();
ComponentName component =
new ComponentName(ThisActivity.this, OtherActivity.class);
intent.setComponent( component );
startActivityForResult(intent, 10);
主要用于应用内启动其他Activity
2. 隐式启动
Uri uri = Uri.parse("http://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
例子是打开Android设备的浏览器并打开gogole主页。
隐式启动可以应用内启动其他Activity,主要用于启动其他应用程序
支持返回的启动方式
以上都是使用startActivity方法,目的用于一个Activity启动两外一个,但是如果启动新Activity还想要其返回一个值该如何处理呢?Android针对需要返回值的情况提供了startActivityForResult方法: // 第一个Activity打开另外一个
Intent intent = new Intent(ThisActivity.this, OtherActivity.class);
startActivityForResult(intent, 10);
// 第二个activity通过setResult返回一个值并关闭当前Activity
setResult(88);
finish();
// 第一个Activity覆写如下方法接收数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == 88) {
Toast.makeText(this, "从Third返回", resultCode ).show();
}
}
四、Activity之间传值
主要通过Intent类进行传值,主要使用intent的Extras,内容原理是使用Map键值对保存数据intent 传递数组、自定义对象等
五、参考资料:
官方文档 - Interacting with Other Appshttp://developer.android.com/training/basics/intents/index.html
列出所有Android支持的启动方式(例如打电话) - Intent类
http://developer.android.com/reference/android/content/Intent.html
如果在官方提供的没有自己想要的,可以看下开源Intent库 - openintents
https://code.google.com/p/openintents/wiki/OpenIntents
Note: 问题记录
1. 如果传递的是TreeMap,接收到的是HahsMap
putExtra treeMap returns HashMap cannot be cast to TreeMap android
http://stackoverflow.com/questions/13960153/putextra-treemap-returns-hashmap-cannot-be-cast-to-treemap-android
2013-12-29 更新Parcelable
2014-11-04 更新问题记录