【问题标题】:Android HTTP GET inside a Service Class服务类中的 Android HTTP GET
【发布时间】:2014-05-21 16:37:49
【问题描述】:

所以我一直在尝试从 Android 服务类中的 URL 获取响应。

我使用了一个异步任务来实现效果,我无法将异步任务传递给 .execute(),知道为什么吗?

请记住,即使应用程序没有运行,此服务也会每分钟运行一次。

我是否可以使用服务从任何 URL 获取响应,或者我最好使用异步任务本身,如果我可以让它执行?

所以我调用了异步任务

switch (mode) {
case ALL:
    new XMLRequestTask().execute(ABSOLUTE_WEBSERVICE_PATH + "all");
    Log.v(LOG_TAG, "XML requests, waiting for answer...");
    break;
case DELTA:
    new XMLRequestTask().execute(ABSOLUTE_WEBSERVICE_PATH + "delta");
    Log.v(LOG_TAG, "XML requests, waiting for answer...");
    break;
}

还有

任务本身。

@Override
protected InputStream doInBackground(String... params) {
        Log.v(LOG_TAG, "Running background task");
    InputStream content = xmlDownloader.getXMlFromURL(mURL);
    //Log.v(LOG_TAG, "Running background task");
    return content;
    }   
@Override
    protected void onPostExecute(InputStream result) {
    Log.v(LOG_TAG, "XML Downloader got: " + result);
    //super.onPostExecute(result);
}

提前感谢您的帮助。

最好的问候

【问题讨论】:

    标签: android android-asynctask android-service androidhttpclient


    【解决方案1】:

    网络操作应在 Android 服务内的后台线程中处理。 AsyncTask 负责 UI 中的更新。

    我认为对于您的用例,将所有同步特定的东西封装在同步适配器内将是一个好方法 (http://udinic.wordpress.com/2013/07/24/write-your-own-android-sync-adapter/)。许多横切关注点将由 Android 系统直接处理。与 CursorLoader 结合使用时,您可以在每次数据更改时更新您的用户界面 (http://developer.android.com/training/load-data-background/setup-loader.html)。

    【讨论】:

    • 因为我在服务中有更多不值得移动的逻辑,所以我决定只等待 HTTP 响应,而不是在单独的线程上执行。尽管如此,我非常喜欢你的方法。我可能会在未来实施,只是不像现在那样紧迫
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多