Android MMS/SMS 入口
2010-11-05 00:55:27 来源:WEB开发网If called, this method will occur before onStop(). There are no guarantees about whether it will occur before or after onPause().
,大概是说: 这个函数的调用,和onPause()以及onStop()都有区别,但是能保证如果CMA被杀死,他能在onStop()前被调用。
这个函数调用发生的场景发生在类似于,CMA调用了某个Activity: AS, 这个AS运行中CMA不幸要阵亡了,那么,因为用户的界面在AS上,用户可能希望在按下back建或者从home进入之类的场景下,还能重现出CMA当时的状态,于是有了这个函数被调用的必要。
在CMA的onSaveInstanceState()函数中,会保存一份联系人,同时保存workingMessage的subject标题/body正文/uri草稿在数据库中的位置 。
这些信息就够恢复用户离开时的场景了。
(II) initialize
mWorkingMessage = WorkingMessage.createEmpty(this);
initActivityState时,
如果之前CMA在onSaveInstanceState时报存了联系人,则会从旧有联系人里面读取出来,联系人相互之间用“;”分割开 。 workingmessage也由之前保存的变量初始化,这个初始化就基本完成了,返回了。
如果没有保存,则从传入的intent中读取thread_id值,进而得到初始化需要的信息:
如果thread_id>0 ; 那么mConversation从Conversation的cache中,有thread_id取得。
如果thread_id<=0;那么从intent的Date获得thread_id,
再不行,就说明之前没有过这个thread了,可能用户是手写的地址,就从address去产生一个ContactList,从ContactList去Conversation的Cache里匹配得到相应的Conversation
这时候,如果匹配还是没有得到Conversation时,Cache里就会偷偷生成一个Conversation返回回来,适用于你这个状况。
Cache用来保证联系人匹配的所有消息,被放入同一个对话(thread)中。
再还有如果联系人也是空的,那么直接产生一个新的Conversation; 这个Conversation是廉价的,因为他没有thread_id,不被放入cache,在使用ensurethreadid之前,他可以创建无数个,可以随意调用创建出来。
有了conversation之后,就可以initMessageList,查询显示出这个thread下面的所有消息
更多精彩
赞助商链接