Android:决定显示启动器中的一个活动

Android:决定显示启动器中的一个活动,android,android-activity,stack,task,Android,Android Activity,Stack,Task,我在开发一个复杂的Android用户界面时遇到了一个严重的问题。我有ActivityA(登录,然后在调用finish()self之后转到B Activity)和ActivityB(在ActivityA之后显示用户)。用户进入ActivityB后(登录成功后),有时网络会被切断,我需要让用户返回ActivityA。所以我在ActivityB中收到一条广播消息,当ActivityB收到广播消息时,它也应该完成自我并返回ActivityA。当ActivityB处于前台时,此功能可以正常工作。但当Act

我在开发一个复杂的Android用户界面时遇到了一个严重的问题。我有ActivityA(登录,然后在调用finish()self之后转到B Activity)和ActivityB(在ActivityA之后显示用户)。用户进入ActivityB后(登录成功后),有时网络会被切断,我需要让用户返回ActivityA。所以我在ActivityB中收到一条广播消息,当ActivityB收到广播消息时,它也应该完成自我并返回ActivityA。当ActivityB处于前台时,此功能可以正常工作。但当ActivityB处于后台时,它无法接收广播消息。我如何解决这个问题?非常感谢。

您必须在onPause或onStop中注销接收器

在onDestroy()之前保持注册状态,这样即使不在前台也可以工作


编辑:尽管爱斯基摩人提出了一个很好的观点。也许活动A只是收集用户凭据。活动B可以进行实际连接。这意味着如果网络消失,活动B将在用户不受打扰的情况下重新建立它。更多的是“安卓”

身份验证(登录)的用户体验可能有点棘手,因为根据您的操作方式以及应用程序与服务器的连接类型,存在多个用例和变体

根据您的描述,听起来应用程序需要有一个持久连接(比如ssh,而不是http),当这个连接被切断时,用户需要重新建立连接并重新验证。我建议使用片段而不是活动。我会有一个登录片段和具有Activity-B功能的片段。我会将该片段称为fragment-B。我建议使用以下基本流程:

  • 在活动的onStart()中,如果用户未登录,则显示登录片段,否则显示片段B
  • 成功验证后,显示片段B
  • 如果应用程序处于前台且连接丢失,请切换到登录片段 这将使用相同的代码处理3种情况:

  • 用户未登录,必须在使用应用程序之前进行身份验证。onStart中的测试将显示登录片段
  • 应用程序位于前台并失去连接
  • 该应用程序位于后台并失去连接。当用户将应用程序带回前台时,onStart中的测试将显示登录片段

  • 如果连接不是持久性的,例如对服务器使用REST api,则这是另一个问题,因为需要缓存身份验证令牌,并且在应用访问服务器之前,应用可能不知道用户不再经过身份验证。(这听起来不像是你的情况。)

    为什么因为网络离线而要求他们再次登录?这对我来说毫无意义。您应该以某种方式指示网络状态,并且应该能够在再次直播时重新连接。广播是做什么的?据我所知,您不应该真正使用finish(),因为android将为您处理活动队列?是的,正如您的描述,身份验证很难实现,您必须是解决此问题的专家。谢谢你的教导。