2013-03-21 2 views
0

Я работаю над приложением, которое имеет 5-6 видов деятельности, в которых участвует пользователь. Во время этого будут созданы некоторые данные и будут сохранены в базе данных.Фоновые задачи без использования сервиса - Android

Мне нужно загрузить/синхронизировать эти данные между сервером (я использую KSOAP2). Но это должно произойти позади. Даже если пользователь прыгает между действиями, он не должен быть затронут. Но когда я ухожу из приложения, я не хочу, чтобы этот процесс продолжался.

Служба Android - единственный способ сделать это? Какой был бы лучший вариант?

+0

IntentService точно выполняет то, что вы хотите. Почему вы предпочитаете не использовать его?См. Эту ссылку для хорошего сравнения с AsyncTask http://stackoverflow.com/a/4177349/530039 – akaya

+0

OK .. спасибо. Но в моем случае: 1. Я не хочу уведомлять пользователя о том, что что-то происходит. Хотя пользователь заполняет некоторые записи в различных действиях, мой процесс загрузки (мыльные вызовы) должен произойти. то есть это должно быть очень фоновая вещь, и я не хочу, чтобы пользователь прерывал его работу. Это возможно ? – 2013-03-22 07:44:19

+0

Вам необязательно уведомлять пользователя. Услуги должны быть очень похожими на то, что вы хотите. Попробуй. – akaya

ответ

1

Вы можете использовать Async Задача

http://developer.android.com/reference/android/os/AsyncTask.html. Взгляните на документацию под заголовком 4 шага.

AsyncTask разработан как вспомогательный класс вокруг Thread and Handler и не представляет собой общую структуру потоков. AsyncTasks в идеале следует использовать для коротких операций (не более нескольких секунд). Если вам нужно поддерживать длительность потоков в течение длительных периодов времени, настоятельно рекомендуется использовать различные API, предоставляемые java.util.concurrent pacakge, такие как Исполнитель, ThreadPoolExecutor и FutureTask.

В вашей деятельности после setContentView()

pd= new ProgressDialog(this); 
    pd.setTitle("Making Soap Request"); 
    new SoapRequestTask().execute(); 

private class SoapRequestTask extends AsyncTask<VOid, Void, Void> { 

    protected void onPreExecute() 
    { 
     pd.show(); 
    } 
    protected SoapObject doInBackground(Void... params) { 
    // TODO Auto-generated method stub 
      //Soap request. do not update ui here 
    return null; 
    } 

protected void onPostExecute(Void param) 
{ 
     //update ui here 
    pd.dismiss(); 

} 

Альтернативой AsyncTask является Robospice. https://github.com/octo-online/robospice.

Здесь вы можете начать работу с robopice. https://github.com/octo-online/robospice/wiki/Starter-Guide.

Образец robospice по телефону https://play.google.com/store/apps/details?id=com.octo.android.robospice.motivations&feature=search_result.

Некоторые из особенностей robospice.

1. выполняет асинхронные (в фоновом режиме AndroidService) запросы сети (например: запросы REST с использованием Spring Android).

2.is строго типизирован! Вы делаете свои запросы с помощью POJO, и вы получаете POJO в качестве результатов запроса.

3.enforce нет ограничений ни на POJO, которые использовались для запросов, ни на классах активности, которые вы используете в своих проектах.

4. отправляет результаты (в Json как с Джексоном, так и с Gson, или Xml, или с плоскими текстовыми файлами, либо с двоичными файлами, даже используя ORM Lite).

5.notifies своей деятельности (или любой другой контекст) результата запроса сети, если и только если они все еще живы

6.no утечки памяти вообще, как Android-погрузчики, в отличие от Android AsyncTasks извещает ваши действия по их теме пользовательского интерфейса.

7. использует простую, но надежную модель обработки исключений.

+0

OK .. спасибо. Но в моем случае, 1. Я не хочу уведомлять пользователя о том, что что-то происходит. Хотя пользователь заполняет некоторые записи в различных действиях, мой процесс загрузки (мыльные вызовы) должен произойти. то есть это должно быть очень фоновая вещь, и я не хочу, чтобы пользователь прерывал его работу. Это возможно через AsyncTask? – 2013-03-22 07:43:44

+0

В этом случае вы должны использовать сервис, если его долго работаете или проверяете robospice. – Raghunandan

Смежные вопросы