我正在开发我的第一个Android应用程序,我很难通过广播解除进度对话框。
情况非常简单:我有一个登录活动,它使用服务与服务器通信并允许或拒绝用户。应用程序等待服务器响应时应显示进度对话框,并在响应到达时被解除。每个工作都很好,直到我的应用程序暂停,因为活动没有收到广播(因为过滤器在onPause事件中未注册)。
所以:
“活动”显示对话框并启动服务。
服务将身份验证信息发送到服务器并等待 响应。
用户在等待响应和活动时按Home 暂停了。
服务从服务器接收响应并广播 意图。
由于活动暂停未收到广播,因此不会忽略进度对话框(如果应用程序收到广播,通常会被解雇没有问题。而且由于我的进度对话框无法取消,因此陷入活动中。)
我知道虽然接收器未注册,但活动不会执行onReceive
方法(这对我来说很关键)。我需要执行解除对话框的方法并继续登录进程,即使应用程序在后台,所以当用户回来时它将在主页面上(如果登录是正确的)。或者至少,当活动恢复时,执行onReceive
来处理响应。
我虽然在一个解决方案中,但我不确定这是否是最好的方法。我想到除了从服务发送广播,在应用程序上下文中保存意图,并且当活动恢复时检查上下文中是否有意图并像服务响应一样使用它(并在过程中解除对话)
显然,对话框不是唯一让我担心的事情,我需要执行所有关闭对话框的部分,因为它决定是让用户进入还是拒绝登录。
如果有人可以为这种情况提供一些最佳实践,我将不胜感激。