Это действительно зависит от ваших требований:
Служба
Если ваш запрос занимает много времени и ваша заявка сильно зависит от результата (постоянные данные) Iпредложил бы использовать службу, потому что система Android может решить убрать приложение, которое было перенесено в фоновый режим, и ваш запрос будет просто пропущен.данные, которые нужны вашему приложению только для текущего состояния (данные, которые могут быть выброшены после закрытия реального приложения), я бы использовал AsyncTask.Это может быть очень сложно обработать, когда происходят изменения ориентации, поэтому я привожу пример ( note - это план, чтобы получить идею, а не окончательное решение).мое приложение и моя AsyncTask убиты?
Когда вы толкаете свое приложение в фоновый режим, оно все еще остается активным.Если вы используете другое приложение и этот запрос требует больше памяти, система Android может решить убить ваше активное приложение, чтобы освободить необходимые ресурсы.С этого момента ваша деятельность и ваша задача ушли.Но у задачи все еще есть шанс завершить и сохранить результаты в базе данных или на SD-карте.
public class YourActivity extends Activity {
private MyReqeustTask mRequestTask;
public void onCreate(Bundle state) {
// your activity setup
// get your running task after orientation change
mRequestTask = (MyRequestTask) getLastNonConfigurationInstance();
if (mRequestTask != null) {
mRequestTask.mActivity = new WeakReference<MyActivity>(this);
processRequest();
}
}
// call that somewhere - decide what implementation pattern you choose
// if you need more than a single request - be inventive ;-)
public startRequest() {
mRequestTask = new MyRequestTask();
mRequestTask.mActivity = new WeakReference<MyActivity>(this);
mRequestTaks.execute(your, params);
}
// this is a request to process the result form your actual request
// if it's still running, nothing happens
public processResult() {
if (mRequestTask == null || mRequest.getStatus() != Status.FINISHED) {
return;
}
Result result = mRequest.getResult();
// update and set whatever you want here
mRequestTask = null;
}
public Object onRetainNonConfigurationInstance() {
// retain task to get it back after orientation change
return mRequestTask;
}
private static MyRequestTaks extends AsyncTask<Params, Progress, Result> {
WeakReference<MyActivity> mActivity;
protected Result doInBackground(Params... params) {
// do your request here
// don't ever youe mActivity in here, publish updates instead!
// return your final result at the end
}
protected void onProgressUpdate(Progress... progress) {
MyActivity activity = mActivity.get();
if (activity != null) {
// do whatever your want to inform activity about undates
}
}
protected void onPostExecute(Result result) {
MyActivity activity = mActivity.get();
if (activity != null) {
// this will update your activity even if it is paused
activity.processRequest();
}
}
}
}