GeoQuiz项目总结——第五章

Activity数据传递

1.Intent extra

intent.putExtra(key,value)

key——String类型

value——多种基本数据类型(或者序列化的对象)

获取:getXXXExtra(),XXX是数据类型(序列化的对象不包含在内)。

2.startActivityForResult(Intent intent, int requestCode)

requestCode:请求代码,用于一个Activity启动多个不同类型Activity,且需要判断区分消息给原Activity。

设置返回结果:setResult(int resultCode)。

resultCode:Activity.RESULT_OK、Activity.RESULT_CANCELED,根据不同的resultCode,原Activity可以判断采取不同的操作。

注:也可以不调用setResult(),如不需区分附加在intent上的结果或其它信息,可以让OS发送默认的resultCode。如果Activity是以调用startActivityForResult()启动的,resultCode总是会返回给原Activity。

譬如:在没有调用setResult的情况下,被startActivityForResult()启动的Activity后退的时候,原Activity收到的resultCode就是Activity.RESULT_CANCELED;如果有调用,则收到setResult()里面设置的resultCode。

ActivityManager维护着一个非特定应用独享的回退栈,所有应用的Activity都共享这个回退栈。

两个Activity之间的通信

  • Activity的启动和关闭,是通过Android操作系统的ActivityManager来进行管理的。Intent对象是负责Activity和ActivityManager通信的。
  • 例如A界面要启动B界面,A先发送Intent对象给ActivityManager。接收到信息后,ActivityManager根据消息启动B界面。

即使是APP内部的Activity通信,也需要通过操作系统的ActivityManager进行。

Intent对象传递数据是通过Extra数据类型传递,其结构是一种key-value结构

  • 总结
    从调用者到被调用者时,调用Activity没有销毁,只是暂停
    被调用者返回调用者时,被调用的Activity则会被销毁

  • 实际上ActivityManager维护着一个Activity栈,所有的应用都在一个共享的Activity栈中。

  • 当主Activity调用第2个Activity时,两个Activity都在栈中,而第2个Activity在栈顶。

  • 当按回退键回退到主Activity时,第2个Activity被弹出栈外,被销毁;而主Activity则回到栈顶。

你可能感兴趣的:(GeoQuiz项目总结——第五章)