Не беспокойтесь о AsyncTasks, если вы понимаете основные потоки, которых достаточно для выполнения. AsyncTasks являются помощниками, и они не очень помогают. Добавьте что-то вроде следующего к вашему сервису. Как правило, вы передаете общий интерфейс (лямбда отлично подойдет, но, увы, Java7), который сработает при ответе. Тогда сервис делает потоки для вас. В конце концов, это то, что всегда будет происходить, если служба обращается к серверу. В любом случае это всегда нужно делать в потоке.
HttpFetch.get(url, new UIResponse() {
@Override
public void response(String header, String content) {
}
},this);
Поскольку он использует статический класс для работы Http, утечки нет, и вы можете просто вызвать его и получить нужные данные ответа. И так как это тот же статический класс, вы, очевидно, можете просто вкладывать их в свое удовольствие. Таким образом, вы отправляете ему запрос и класс для ответа и реализуете класс ответа.
Например, вот остальная часть того времени, когда я сделал именно эту вещь:
public static void get(final URL urir, final Response response, final Activity activity) {
Runnable run = new Runnable() {
@Override
public void run() {
HttpURLConnection urlConnection = null;
try {
urlConnection = (HttpURLConnection) urir.openConnection();
InputStream stream = new BufferedInputStream(urlConnection.getInputStream());
final String content = convertStreamToString(stream);
final String header = urlConnection.getResponseMessage();
stream.close();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
response.response(header, content);
}
});
} catch (final IOException e) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
response.error(e);
}
});
} finally {
if (urlConnection != null) urlConnection.disconnect();
}
}
};
Thread thread = new Thread(run);
thread.start();
}
static String convertStreamToString(java.io.InputStream is) {
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
public interface Response {
void response(String header, String content);
void error(IOException exception);
}
Другие классы, такие как RxJava, вероятно, будут делать то же самое. Просто передайте ему запрос с функцией ответа и выполните потоковую обработку в сервисе, и все будет прекрасно.