【问题标题】:(Android) Threaded httpClient task, without blocking UI?(Android) 线程化 httpClient 任务,不阻塞 UI?
【发布时间】:2011-05-30 18:06:40
【问题描述】:

我制作了一个基于用户输入从 Internet 获取网页的应用程序,效果非常好。获取分为不同的步骤:使用来自 edittext 的字符串作为参数发布,经过一些解析后,返回一个名称数组,该数组显示在 AlertDialog 中。当用户选择一个时,它会以该字符串作为参数发布另一个帖子。
这可行,但现在我想让它成为线程(或类似的),这样 UI 就不会无响应。 我尝试了 Threads、Runnables 和 AsyncTask,但我只是找不到在单个线程中获取数据的构造,并且还能够返回该数组并选择一个名称,而无需创建我的 HttpClient 的新实例。这会清除您看到的 Cookie...

我花了大约整整一周的时间来解决这个问题,但就是没有看到它:(

所以有人有想法吗?谢谢!

【问题讨论】:

    标签: android multithreading httpclient android-asynctask fetch


    【解决方案1】:

    对于每个 HTTP 访问,您可以创建一个单独的 AsyncTask 子类,然后依次实例化它们中的每一个,并执行它们。在网上有很多关于如何使用 AsyncTask 访问 HTTP 的示例,例如herehere(只需 google 即可获得 this 之类的内容)。

    这里要掌握的主要思想是在 AsyncTask 的 doInBackground 方法体中执行所有与网络相关的操作。

    正如 Ted Hopp 所说,您可以让 HttpClient 实例成为 Activity 的私有成员(或任何类持有这两个 AsyncTask),这样第一个 AsyncTask 将创建它,而第二个一个人可以使用相同的。

    【讨论】:

      【解决方案2】:

      您可以使用两个 AsyncTask 子类,每个请求一个。让子类访问活动类中存储 HttpClient 对象的变量。

      【讨论】:

      • 两个子类?你的意思是两个实例?
      • 我的意思是两个不同子类的实例。在一个子类中,doInBackground 检索名称数组。选择名称后,创建另一个子类的实例(在其构造函数中传递选定的名称),在它的 doInBackground 中执行第二个 POST。
      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多