【问题标题】:Use AsyncTask in multiple activities在多个活动中使用 AsyncTask
【发布时间】:2014-03-19 00:10:18
【问题描述】:

我在正确使用 AsyncTask 时遇到问题。我使用 AsyncTask 与服务器通信。我在 AsyncTask doInBackground 中运行服务器连接。我的应用程序在后台侦听,一旦捕获的消息使用 publishProgress。然后我可以在我的应用程序中使用消息。在我的应用程序中,我正在登录服务器,如果成功,新活动将开始。我还需要在新活动中与服务器通信,但连接是在后台 AsyncTask 中创建的。我不知道如何通过新活动中的已建立连接进行通信。谁能给我建议?非常感谢!

请查看代码。我在 LoginUser 类中有这段代码,成功登录到服务器后,新的 Activity 开始了。

//init
private ConnectionClass mConnectClass; 
private connectTask mTask;

//execute  connectTask
mTask = new connectTask();
mTask.execute("");

    public class connectTask extends AsyncTask<String, String, ConnectionClass> {
    @Override
    protected ConnectionClass doInBackground(String... message) {
        Log.i("Terminal", "doInBackground.");

        mConnectClass = new ConnectionClass(
                new ConnectionClass.OnMessageReceived() {
                    @Override
                    // here the messageReceived method is implemented
                    public void messageReceived(String message) {
                        // this method calls the onProgressUpdate
                        publishProgress(message);
                    }
                });
        Log.i("Terminal", "Starting...");
        mConnectClass.connectServer();
        return null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        answerFromServer = Arrays.toString(values);
        // serverMessage.append("S: " + Arrays.toString(values) + "\n");
    }
}

【问题讨论】:

  • AsyncTask 用于短期的一次性后台任务。如果您建立连接并希望保持连接状态,则需要考虑使用Service

标签: java android android-asynctask


【解决方案1】:

不要为此使用AsyncTask。您似乎希望长时间保持连接打开。 AsyncTask 应该只用于持续到at most a few seconds 的任务。您可以考虑改用Service

【讨论】:

  • 感谢您的帮助!我想再问一个问题。我想将用户登录到服务器,然后在新活动中继续与服务器通信。你怎么说,我应该使用服务,然后我可以长时间保持连接打开。但是我需要将来自服务器的新消息显示到屏幕上。我应该使用 AsyncTask 在 ServiceClass 中显示新消息吗?有没有更好的方法可以实现这一目标?
  • 可能有多种方法可以做到这一点,但我会考虑发送local broadcast。由于这与您原来的问题不同,如果您需要更多帮助,最好提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多