gpt4 book ai didi

Android - httpclient 作为后台服务

转载 作者:行者123 更新时间:2023-11-29 14:56:25 24 4
gpt4 key购买 nike

我有一个应用程序可以登录网络服务并上传文件。当我转到不同的屏幕并从 web 服务获取数据时,我需要保持 session 有效。我读到我需要将 http 调用作为一项服务进行,并可能使用该服务启动我的应用程序。如何将我的“登录” Activity 和“上传” Activity httpclient 调用放入 http 服务 Activity 中?

谢谢。

最佳答案

由于服务在与 UI 线程相同的线程上运行,因此您需要在不同的线程中运行该服务。您可以通过几种不同的方式执行此操作:

  1. 在服务的 onCreate () 中使用常规 Java 线程或 onBind()等等,方法
  2. onCreate() 内使用 AsyncTask方法 - 另一种形式的线程,但如果您需要进行 UI 更新则更简洁
  3. 使用IntentService它提供异步服务任务执行 - 不确定它的效果如何,因为我从未使用过它。

所有这三种方法都应该允许您在后台通过服务与 HttpClient 建立连接,即使我从未使用过 IntentService,它看起来也是我的最佳选择。如果您需要更改只能在 UI 线程上完成的 UI,AsyncTask 将非常有用。

按要求编辑:所以我目前正在做一些需要以异步方式进行 Http 连接的事情。发表这篇文章后,我尝试了第 3 个,它确实工作得很好/很容易。唯一的问题是信息必须通过非常难看的 Intent 在两个上下文之间传递。因此,这里是您可以在异步后台服务中建立 http 连接的大致示例。

从外部 Activity 启动异步服务。我放置了两个按钮,以便在服务运行时可以看到 Activity 正在执行。真正可以在任何您喜欢的地方启动 Intent。

/* Can be executed when button is clicked, activity is launched, etc.
Here I launch it from a OnClickListener of a button. Not really relevant to our interests. */
public void onClick(View v) {
Intent i = new Intent ("com.test.services.BackgroundConnectionService");
v.getContext().startService(i);
}

然后在BackgroundConnectionService内您必须扩展 IntentService 类并在 onHandleIntent(Intent intent) 中实现所有 http 调用方法。就像这个例子一样简单:

public class BackgroundConnectionService extends IntentService {

public BackgroundConnectionService() {
// Need this to name the service
super ("ConnectionServices");
}

@Override
protected void onHandleIntent(Intent arg0) {
// Do stuff that you want to happen asynchronously here
DefaultHttpClient httpclient = new DefaultHttpClient ();
HttpGet httpget = new HttpGet ("http://www.google.com");
// Some try and catch that I am leaving out
httpclient.execute (httpget);
}
}

最后,像在 <application> 中的 AndroidManifest.xml 文件中声明任何普通服务一样声明异步服务。标签。

...
<service android:name="com.test.services.BackgroundConnectionService">
<intent-filter>
<action android:name="com.test.services.BackgroundConnectionService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
...

应该差不多了。这实际上很容易:D

关于Android - httpclient 作为后台服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com