1.Activity的四种启动模式: 1). standard 模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。 2). singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。 3). singleTask 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 4). singleInstance 在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
2.Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" />
3.Activity生命周期
4.Intent几种常见的flags:
1).1.FLAG_ACTIVITY_NEW_TASK:当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task.
2).FLAG_ACTIVITY_CLEAR_TOP:当Intent对象包含这个标记时,如果在栈中发现存在Activity实例,则清空这个实例之上的Activity,使其处于栈顶。
3).FLAG_ACTIVITY_SINGLE_TOP:当task中存在目标Activity实例并且位于栈的顶端时,不再创建一个新的,直接利用这个实例。
4).FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:如果一个Intent中包含此属性,则它转向的那个Activity以及在那个Activity其上的所有Activity都会在task重置时被清除出task。
5).FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:这个标记在以下情况下会生效:1.启动Activity时创建新的task来放置Activity实例;2.已存在的task被放置于前台。系统会根据affinity对指定的task进行重置操作,task会压入某些Activity实例或移除某些Activity实例。
5 .activity的task相关属性
1).android:allowTaskReparenting用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task.
2).android:alwaysRetainTaskState用来标记应用的task是否保持原来的状态.
*res/raw和assets的相同点:
1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
*res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到 R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
*读取文件资源:
1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作
- InputStream is = getResources().openRawResource(R.id.filename);
2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作
- AssetManager am = null;
- am = getAssets();
- InputStream is = am.open("filename");
特点:如果当前的convertView为null,则通过LayoutInflat产生一个view。
13activity 状态
当Activity被创建或销毁时,它们进入或退出Activity栈。当它们做这些动作时,它们就会在四种可能的状态间迁移:
❑ Active
当Activity在栈的顶端时,它是可见的,有焦点的前台Activity,用来响应用户的输入。Android会不惜一切代价来尝试保证它的活跃性,需要的话它会杀死栈中更靠下的Activity来保证Active Activity需要的资源。当另一个Activity变成Active状态时,这个就会变成paused。
❑ Paused
在一些情况下,你的Activity可见但不拥有焦点;在这个时刻,它就是暂停的。当最前面的Activity是全透明或非全屏的Activity时,下面的Activity就会到达这个状态。当暂停时,这个Activity还是被看作是active的,但不接受用户的输入事件。在极端的情况下,Android会杀死一个paused的Activity来恢复资源给active Activity。当一个Activity完全不可见时,它就变成stopped。
❑ Stopped
当一个Activity不可见,它就“停止”了。这个Activity仍然留在内存里来保存所有的状态和成员信息;但是,在什么地方当系统需要内存时,它就是“罪犯”拉出去枪毙了。当一个Activity停止时,保存数据和当前UI状态是很重要的。一旦Activity退出或关闭,它就变成inactive。
❑ Inactive
当一个曾经被启动过的Activity被杀死时,它就变成inactive。Inactive Activity会从Activity栈中移除,当它重新显示和使用时需要再次启动。