1

Я разработал приложение, использующее базу данных sqlite. Приложение должно общаются/синхронизации (мастер-мастер) несколько таблиц базы данных после следующих событий:Volley libary vs Android SyncAdapter

  • О применении запуска
  • При клике на кнопку обновления
  • В случае, если использование выполнить некоторую операцию, которая изменяет данные в базе данных sqlite

Андроидную базу данных sqlite не нужно синхронизировать, если приложение не работает. Каждый запрос на синхронизацию должен быть расширен от Authorization header. Volley lib уже интегрирован в приложение.

Вопрос (учитывая пример использования выше), лучше ли использовать Volley libary для связи между приложением и сервером или инструментом AsyncAdapter? Можно ли комбинировать оба подхода?

Спасибо

+0

Использование SyncAdapter поставляется с дополнительными пакетами, такими как AccountManager, Loaders и Content Providers. Что работает в тандеме, чтобы обновлять данные с меньшими ресурсами. – Skynet

ответ

0

SyncAdapter для обработки периодических синхронизируется между сервером и клиентом SyncAdapter

Глядя на ваше приложение потребностей, я хотел бы предложить залп.

4

SyncAdapter следует использовать для залп выборки данных, как это:

public class SyncAdapter extends AbstractThreadedSyncAdapter { 

    @Override 
    public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, final SyncResult syncResult) { 
    RequestQueue queue = VolleyService.getInstance(this.getContext()).getRequestQueue(); 
     StringRequest request = new StringRequest(url, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       // we got the response, now our job is to handle it 
       try { 
        //Parse JSON response and Insert/Update data to SQLite DB 
       } catch (RemoteException | OperationApplicationException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       //something happened, treat the error. 
      } 
     }); 

     queue.add(request); 

    } 

} 

SyncAdapter используется для синхронизации данных по требованию или периодически. На вашем содержимого распознаватель вы можете установить тип обновления и период:

ContentResolver.addPeriodicSync(account, "com.android.app", params, 150); 
ContentResolver.setSyncAutomatically(account, "com.android.app", true); 

Volley служба:

public class VolleyService { 

    private static VolleyService instance; 
    private RequestQueue requestQueue; 
    private ImageLoader imageLoader; 

    private VolleyService(Context context) { 
     requestQueue = Volley.newRequestQueue(context); 

     imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { 
      private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20); 

      @Override 
      public Bitmap getBitmap(String url) { 
       return cache.get(url); 
      } 

      @Override 
      public void putBitmap(String url, Bitmap bitmap) { 
       cache.put(url,bitmap); 
      } 
     }); 
    } 

    public static VolleyService getInstance(Context context) { 
     if (instance == null) { 
      instance = new VolleyService(context); 
     } 
     return instance; 
    } 

    public RequestQueue getRequestQueue() { 
     return requestQueue; 
    } 

    public ImageLoader getImageLoader() { 
     return imageLoader; 
    } 
} 
+1

метод onPerformSync заканчивается до завершения обработки асинхронных данных (сложный запрос (ы) волейбола может занять несколько секунд ... Может быть, проблема? Например, может ли поток SynchAdapter выходить из системы как «больше не используется»? – Wooff

1

синхронизации адаптеры выполняются асинхронно, так что вы должны использовать их в надежде, что они передают данные регулярно и эффективно , но не мгновенно. Если вам нужна передача данных в реальном времени, вам следует использовать Volley (или в основном AsyncTask или IntentService). Refer Android documentation. Так что в вашем случае Volley предпочтительнее, чем адаптер Sync.

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