0

所以我有两个android活动(活动1(SignUpActivity),活动2(RegisterActivity))

第一个活动应该在新用户的情况下启动第二个活动(不是问题)

诀窍是我需要先调用某个服务。该服务将调用某个服务器并获取一些数据以提供给(RegisterActivity)

所以为了做到这一点,有一些可能的解决方案

  1. 不需要该服务,我们可以从活动 1 发出 HTTP 请求。但是我已经有一个扩展 SignUpActivity 中的 AsyncTask 的类。它还有另一项工作(基本上是让用户登录。

  2. 我可以调用该服务,然后调用 Activity 2(这是一个简单的解决方案)但是第二个活动将在服务结束之前开始。这意味着它将尝试访问一些仍然为空的数据。

第二种解决方案似乎更容易实现,但是我能想到的唯一方法是使用信号量锁。这是我不太擅长的事情,我不确定它是否是最聪明的解决方案。

我尝试使用它,但它不起作用,我觉得这不是正确的做法

您认为解决该问题的明智方法是什么?

4

2 回答 2

2
  • 最好的选择是在特定任务完成后从您的第一个活动创建第二个活动。为此,您可以AsyncTask在 Activity 1 中创建另一个并在 Activity 2 完成后启动它(您可以AsyncTasks并行运行多个不同的目的)
    编辑
    以确保它们并行运行,只需将每个任务更改yourTask.execute(params)yourTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);`。

  • 另一种选择是在服务决定需要时从服务创建活动 2。

于 2013-11-05T16:59:44.483 回答
0

我建议使用第二个 AsyncTask,因为在开始第二个活动之前,您肯定需要等待服务返回。

请记住,如果您同时执行多个 AsyncTask,它们将由类按顺序执行AsyncTask(它设置了一个最多接受 10 个 AsyncTask 的队列)。

如果您确实需要并行运行这两个任务,我建议您实现ThreadPool并使用Runnable来传递任务,包括启动第二个活动。

这是我的一个项目中的ThreadPool示例。您几乎可以批发复制它,因为它非常通用。

可运行的示例是:

Runnable task = new Runnable() {
    @Override
    public void run() {

       // Call service and wait for it to finish //

       startActivity(new Intent("com.example.project.RegisterActivity);
    }
};

ThreadPool.executeTask(task);    // We use the ThreadPool to run the 'task' Runnable

如果代码抱怨需要从主线程运行,您将需要使用HandlerFirst Acitivity 中定义的startActivity()从内部发布调用Runnable.

于 2013-11-05T17:10:30.527 回答