Android 如何在不使用意图的情况下从子孩子活动跳转到主活动?

Android 如何在不使用意图的情况下从子孩子活动跳转到主活动?,android,android-intent,asynchronous,Android,Android Intent,Asynchronous,我有以下活动。1) 主要活动2)活动1 3)活动2 这就是活动连接在一起的方式 主活动->活动1->活动2(创建后台异步任务),因此“活动1”是子活动,“活动2”是子活动。以及从“活动2”创建后台异步任务 假设我当前在“活动2”屏幕上,并且正在运行反向异步任务。现在,在“后台异步任务”上发生一些失败事件之后,我想返回“主活动”。做这件事的好方法是什么 我想的几个方法是,1)完全重新启动应用程序2)从后台异步任务创建主活动的新意图,就像我们创建的“活动1和2” 我不知道这里面哪一个好用。还有别的办

我有以下活动。1) 主要活动2)活动1 3)活动2

这就是活动连接在一起的方式

主活动->活动1->活动2(创建后台异步任务),因此“活动1”是子活动,“活动2”是子活动。以及从“活动2”创建后台异步任务

假设我当前在“活动2”屏幕上,并且正在运行反向异步任务。现在,在“后台异步任务”上发生一些失败事件之后,我想返回“主活动”。做这件事的好方法是什么

我想的几个方法是,1)完全重新启动应用程序2)从后台异步任务创建主活动的新意图,就像我们创建的“活动1和2”

我不知道这里面哪一个好用。还有别的办法吗

我是android的新手。我目前正在使用BroadcastReceiver(在活动1和2上)在后台异步任务广播失败事件发生时完成当前活动,但有时它会跳转到“主活动”,有时跳转到“活动1”。所以没有像我想的那样工作

请你提出一个好办法好吗? [抱歉,我不得不再次问这个问题。因为旧问题已被删除]

@Rohit,我尝试了你们建议的在去活动2之前完成活动1的方式。这也行得通,但会造成另一个问题

完成此操作后,当我按下后退按钮时,它将直接转到主活动,而不是活动1,因为它已不存在

有什么解决办法可以让这两件事都起作用吗?按下后退按钮时,我想跳到活动1。当从活动2创建的后台异步任务发现问题时,我想跳转到主活动

[编辑] 让我描述更具体的情况

主要活动列出基于开放Wifi接入点的硬件

当单击特定列出的访问点时,它会打开登录活动,并请求用户id和密码以访问硬件。登录活动onCreate功能还创建TcpAsyncTask后台任务,该任务将与硬件(具有WiFi接入点功能)通信,以进行身份验证和数据传递

当用户输入登录详细信息并单击登录按钮时,它将创建即时后台任务LoginDeviceAsyncTask。此任务将通过先前创建的TcpAsyncTask与硬件通信,以验证身份验证。如果身份验证成功,它将使用startActivityForResult创建导航活动

在导航活动中,它列出了打开特定窗口的选项,例如仪表板。历史当用户从选项中选择Dashboard时,它会使用startActivity创建Dashboard活动。当用户从选项中选择历史记录时,它会使用startActivity创建历史记录活动

因此,如果打开仪表板活动,它将显示使用TcpAsyncTask(在登录活动之前创建)定期从硬件接收的一些数据

类似地,如果打开“历史记录”活动,它将显示使用TcpAsyncTask(在登录活动中创建)定期从硬件接收的一些数据

仪表板/历史记录活动具有直接移动到历史记录/仪表板活动的选项。为此,它使用startActivity和finish current activity创建所选活动

现在我的问题是, 假设我在Dashboard活动中,它使用TcpAsyncTask显示从硬件接收的数据现在TcpAsyncTask无法与硬件通信,此时我想直接转到主活动。

在TcpAsyncTask中,我没有在TcpAsyncTask之后创建的导航/仪表板/历史等活动的上下文。可能我可以使用一些MainActivity变量在TcpAsyncTask中获取此上下文,这些变量会根据create/finish进行更新。我说得对吗


我正在使用BroadcastReceiver从TcpAsyncTask进行当前广播以关闭,并在导航/仪表板/历史活动中接收广播消息,并完成接收广播关闭消息的特定活动。但有时它会跳转到主活动,有时当从TcpAsyncTask发送广播以关闭时,它会跳转到导航活动。

在异步任务中传递上下文,通过它,您可以终止活动1和活动2

((活动)上下文).finish()


您可以通过传递这两个活动的上下文来为这两个活动执行此操作。

首先,请记住,不在前台的非活动活动中运行的代码是不可靠的。所以您不应该依赖后台异步任务。相反,使用一个进行后台处理的服务;这正是服务要包含的内容(包括其他持久性处理)。虽然对于初学者来说,这是一个相当多的学习内容,但从长远来看,它将为您节省很多麻烦,因为它的生命周期比复杂的活动网络及其关系和生命周期更容易管理

你应该仔细阅读安卓系统的“后台堆栈”。如果您完成一个活动,将显示后堆栈上的上一个活动。这些类似于浏览器维护的历史记录,用于确定浏览器后退按钮的操作方式

因此,您需要的是主活动生成子活动的新实例。然后,当用户导航back按钮时,将恢复back stack(主活动)中的上一个活动。这不需要意图


但是,对于由后台处理任务触发的活动,我强烈建议使用服务并打算协调所有活动。

一种可能的解决方案是使用
startActivityForResult()
启动活动2,然后在其处理过程中,您可以调用
setResult()
,以指示成功或失败。在活动1中,覆盖ActivityResult()
并取消