【发布时间】:2014-09-09 13:36:56
【问题描述】:
我有以下活动。 1) 主要活动 2) 活动一 3) 活动二
这是将活动连接在一起的方式
Main Activity -> Activity 1 -> Activity 2(创建后台异步任务)所以“Activity 1”是子活动,“Activity 2”是子活动。并从“Activity 2”创建后台异步任务
假设我目前在“活动 2”屏幕上,后台异步任务正在运行。现在在“后台异步任务”发生一些失败事件之后,我想回到“主要活动”。有什么好的方法可以做到这一点?
我的想法是,1)完全重启应用程序 2)从后台异步任务创建新的主要活动意图,就像我们创建“活动 1 和 2”一样。
我不确定其中哪一个好用。还有其他方法吗?
我是安卓的新手。我目前正在使用 BroadcastReceiver(在活动 1 和 2 上)在后台异步任务广播失败事件时完成当前活动,但有时它会跳转到“主要活动”,有时会跳转到“活动 1”。所以没有像我想要的那样工作。
您能提出一个好的方法吗? [对不起,我不得不再次问这个问题。因为旧问题已被删除]
@Rohit,我尝试了你建议的在去 Activity2 之前完成 Activity 1 的方法。这也可行,但会产生另一个问题。
执行此操作后,当我按下返回按钮时,它直接转到主活动而不是活动 1,因为它不再存在。
有什么解决方案可以让这两个东西都工作吗?按下后退按钮时,我想跳转到活动 1。当从活动 2 创建的后台异步任务发现问题时,我想跳转到主活动。
[编辑] 让我描述更具体的情况。
主要活动列出打开的基于 Wifi 接入点的硬件。
当点击特定列出的接入点时,它会打开 登录活动 并询问用户 ID 和密码以进行硬件访问。登录活动 onCreate 函数还创建 TcpAsyncTask 后台任务,该任务将与硬件(具有 WiFi 接入点功能)进行通信以进行身份验证和数据传递。
当用户输入登录详细信息并单击登录按钮时,它将创建瞬时后台任务LoginDeviceAsyncTask。此任务将通过之前创建的 TcpAsyncTask 与硬件通信以验证身份验证。如果身份验证成功,它将使用 startActivityForResult 创建 Navigation 活动。
在导航活动中,它列出了打开特定窗口的选项,例如仪表板。历史。当用户从选项中选择仪表板时,它会使用 startActivity 创建 仪表板 活动。当用户从选项中选择 History 时,它会使用 startActivity 创建 History 活动。
因此,如果 Dashboard 活动被打开,它会显示一些使用 TcpAsyncTask 定期从硬件接收的数据(在登录活动中创建)
类似地,如果 History 活动被打开,它会显示一些使用 TcpAsyncTask 定期从硬件接收的数据(在 Login 活动中创建)
仪表板/历史活动具有直接移动到历史/仪表板活动的选项。为此,它使用 startActivity 创建选定的活动并完成当前活动。
现在我的问题是, 假设我在仪表板活动中,它正在使用 TcpAsyncTask 显示从硬件接收到的数据。 现在不知何故 TcpAsyncTask 无法与硬件通信,此时我想直接移动到 Main 活动。
在 TcpAsyncTask 中,我没有像在 TcpAsyncTask 之后创建的 Navigation/Dashboard/History 这样的活动上下文。可能我可以使用一些 MainActivity 变量在 TcpAsyncTask 中获取此上下文,这些变量根据创建/完成进行更新。我说的对吗?
我当前正在广播从 TcpAsyncTask 关闭,并使用 BroadcastReceiver 在 Navigation/Dashboard/History 活动中接收广播消息,并完成接收广播关闭消息的特定活动。但有时会跳转到 Main 活动,有时会在 sendBroadcast 从 TcpAsyncTask 关闭时跳转到 Navigation 活动。
【问题讨论】:
-
你能创建一个最小的例子来说明你想要做什么吗?为了简化代码,使用按钮来模拟事件,例如 TcpAsyncTask 失败。
-
我很难制作一个适用于我的应用程序的完整示例。但是,如果从长描述中不清楚,我可以为您提供流程图以了解我试图解释的内容:(。
标签: android android-intent asynchronous