在
MMS中最重要的两个ui,或者说是用户操作短信的入口,一个是conversationList(短信列表界面) ,另一个就是ComposeMessageActiity(单个对话或者短信),以后简称CMA。
每个 CMA 录属于一个Conversation或者不属于任何conversation(无收件人草稿);每个converation由独立的threadId来相互区分
每个CMA有一个WorkingMessage,唯一,表示这个thread(话题)下,用户编辑的短信草稿。
CMA和ConversationList的launch mode都是singleTop
android的launch mode涉及到Task和Activity,简单点说,用户看到的每个界面,基本上都是一个个的Activity,而这些Activity以栈的形式放入在Task中,比如进栈操作由用户的点击进入其他Activity产生,出栈由用户按下back键完成。
一个Task的属性,由他拥有的第一个Activity,也就是栈底的那个activity决定。
一个Activity的launch mode,就是决定他在Task中的表现特点,比如默认的standard模式,就是没有特点,可以在一个Task里随便加,随便加几个instance都成,还能同时在多个Task中共存,就像IE打开网页那种感觉,没有什么限制。
singleTask是整个手机中只能有一个,而且必须出现在这个Task的栈底。
singleInstance表示这个Acitivity独占了整个Task,这个task只有这么一个Activity,最霸道。
singleTop和standard有点类似,区别是,他会去重用Task顶层的他自己的实体,有点绕,像文档上说的,举个例子就明白了。
比如说ABC是3个Activity,mode是standard,在一个栈中的排列是A-B-C,这时候由C再new一个C的intent时,Task变成A-B-C-C;
如果C的mode凑巧是singleTop,那么顶部只能是一个C,也就是在A-B-C这个场景下,再来一个C时,Task变成A-B-C。只是现在顶部的C已经是崭新的C,不是原来那个。
另外,比如launcher按下一个C的图标,这时候,系统会检索所有以C为栈底的Task,如果找到了,就把他起起来,如果没有,就起一个新的。
CMA的 onSaveInstanceState 函数
引用一段在文档上的说明,
大概是说: 这个函数的调用,和onPause()以及onStop()都有区别,但是能保证如果CMA被杀死,他能在onStop()前被调用。
这个函数调用发生的场景发生在类似于,CMA调用了某个Activity: AS, 这个AS运行中CMA不幸要阵亡了,那么,因为用户的界面在AS上,用户可能希望在按下back建或者从home进入之类的场景下,还能重现出CMA当时的状态,于是有了这个函数被调用的必要。
在CMA的onSaveInstanceState()函数中,会保存一份联系人,同时保存workingMessage的subject标题/body正文/uri草稿在数据库中的位置 。
这些信息就够恢复用户离开时的场景了。
每个 CMA 录属于一个Conversation或者不属于任何conversation(无收件人草稿);每个converation由独立的threadId来相互区分
每个CMA有一个WorkingMessage,唯一,表示这个thread(话题)下,用户编辑的短信草稿。
CMA和ConversationList的launch mode都是singleTop
android的launch mode涉及到Task和Activity,简单点说,用户看到的每个界面,基本上都是一个个的Activity,而这些Activity以栈的形式放入在Task中,比如进栈操作由用户的点击进入其他Activity产生,出栈由用户按下back键完成。
一个Task的属性,由他拥有的第一个Activity,也就是栈底的那个activity决定。
一个Activity的launch mode,就是决定他在Task中的表现特点,比如默认的standard模式,就是没有特点,可以在一个Task里随便加,随便加几个instance都成,还能同时在多个Task中共存,就像IE打开网页那种感觉,没有什么限制。
singleTask是整个手机中只能有一个,而且必须出现在这个Task的栈底。
singleInstance表示这个Acitivity独占了整个Task,这个task只有这么一个Activity,最霸道。
singleTop和standard有点类似,区别是,他会去重用Task顶层的他自己的实体,有点绕,像文档上说的,举个例子就明白了。
比如说ABC是3个Activity,mode是standard,在一个栈中的排列是A-B-C,这时候由C再new一个C的intent时,Task变成A-B-C-C;
如果C的mode凑巧是singleTop,那么顶部只能是一个C,也就是在A-B-C这个场景下,再来一个C时,Task变成A-B-C。只是现在顶部的C已经是崭新的C,不是原来那个。
另外,比如launcher按下一个C的图标,这时候,系统会检索所有以C为栈底的Task,如果找到了,就把他起起来,如果没有,就起一个新的。
CMA的 onSaveInstanceState 函数
引用一段在文档上的说明,
大概是说: 这个函数的调用,和onPause()以及onStop()都有区别,但是能保证如果CMA被杀死,他能在onStop()前被调用。
这个函数调用发生的场景发生在类似于,CMA调用了某个Activity: AS, 这个AS运行中CMA不幸要阵亡了,那么,因为用户的界面在AS上,用户可能希望在按下back建或者从home进入之类的场景下,还能重现出CMA当时的状态,于是有了这个函数被调用的必要。
在CMA的onSaveInstanceState()函数中,会保存一份联系人,同时保存workingMessage的subject标题/body正文/uri草稿在数据库中的位置 。
这些信息就够恢复用户离开时的场景了。