美文网首页
GeoQuiz项目总结——第五章

GeoQuiz项目总结——第五章

作者: 圈圈_勿忘初心 | 来源:发表于2017-03-22 19:51 被阅读0次

    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项目总结——第五章

          本文链接:https://www.haomeiwen.com/subject/zitanttx.html