Volley — bu nima, Google tarmoq kutubxonasining xususiyatlari

Muallif: IT Sectr Nashr etilgan: 2026-03-07 O'qish vaqti: 8 daq

Volley — Android uchun Google tomonidan ishlab chiqilgan, HTTP so'rovlarini va rasmlarni yuklashni samarali bajaradigan tarmoq kutubxonasidir. Kutubxona avtomatik ravishda oqimlar hovuzini boshqaradi, javoblarni keshlaydi va so'rovlarni prioritetlashtiradi. Google, 2025 ma'lumotiga ko'ra, Volley murakkab bog'liqliklarni sozlamasdan tez boshlashni talab qiladigan loyihalar uchun mashhur tanlov bo'lib qolmoqda.

Asosiy fikrlar

  • Volley — Android uchun Google-dan avtomatik oqim boshqaruvi bilan tarmoq kutubxonasi
  • RequestQueue — navbatni tashkil qilish va so'rovlarni bajarish uchun markaziy sinf
  • ImageLoader — keshlash bilan rasmlarni yuklash uchun o'rnatilgan vosita
  • Prioritetlashtirish — oddiy, past va yuqori so'rov prioritetlarini qo'llab-quvvatlash
  • Keshlash — takrorlanuvchi so'rovlar uchun o'rnatilgan disk va xotira keshi

Volley nima?

Volley — Google tomonidan I/O 2013 konferentsiyasida taqdim etilgan Android ilovalarida tarmoq aloqasi uchun kutubxonadir. Volley nomi “salvo” ma'nosini bildiradi — kutubxona interfeysning javob tezligi muhim bo'lgan UI yo'naltirilgan ilovalar uchun xarakterli bo'lgan ko'plab parallel tezkor so'rovlarni bajarish uchun mo'ljallangan.

Volley HttpURLConnection va AsyncTask muammolarining yechimi sifatida yaratilgan: oqimlarni qo'lda boshqarish, keshlashning yo'qligi, so'rovlarni prioritetlashtirish qiyinligi va hajmli kod. Google Volley-ni “fire-and-forget” turidagi operatsiyalar uchun kutubxona sifatida taqdim etdi — natijasi darhol interfeysda ko'rsatiladigan kichik so'rovlar.

Volley arxitekturasi uchta asosiy komponentdan iborat: RequestQueue (navbat menejeri), CacheDispatcher (keshlangan javoblar uchun oqim) va NetworkDispatcher (tarmoq oqimlari). Bu arxitektura so'rovlarni avtomatik ravishda taqsimlaydi: avval kesh tekshiriladi va faqat u bo'lmaganda tarmoq so'rovi bajariladi. Bu takrorlanuvchi ma'lumotlar uchun kechikishni 50–80% kamaytiradi.

Volley qanday ishlaydi

RequestQueue — Volley-ning markaziy sinfi. Unga Request<T> obyektlari qo'shiladi va navbat ularni avtomatik ravishda ikki turdagi oqimga taqsimlaydi: CacheDispatcher (bitta oqim, mumkin bo'lgan kesh bilan so'rovlarni qayta ishlaydi) va NetworkDispatcher (bir nechta oqim, haqiqiy HTTP so'rovlarini bajaradi). Odatiy bo'lib Volley 4 ta tarmoq oqimini yaratadi.

So'rov qo'shilganda RequestQueue uning keshdan xizmat qilish mumkinligini tekshiradi. Agar kesh dolzarb javobni o'z ichiga olsa, CacheDispatcher uni darhol qaytaradi, tarmoq so'rovsisiz. Agar kesh eskirgan yoki yo'q bo'lsa, so'rov NetworkDispatcher-ga uzatiladi. So'rov prioriteti (low, normal, high, immediate) navbat ichida qayta ishlash tartibini belgilaydi — high prioritetli so'rovlar normal-dan oldin ishlanadi.

So'rov bajarilgandan so'ng natija Handler orqali asosiy oqimga (UI thread) yetkaziladi. Volley avtomatik ravishda onResponse() va onErrorResponse() callback-larini asosiy oqimga o'tkazadi, shuning uchun interfeysni to'g'ridan-to'g'ri callback ichida qo'shimcha o'tishlarsiz yangilash mumkin. Bu kodni soddalashtiradi va oqimlar bilan bog'liq xatolarning butun sinfini bartaraf qiladi.

Volley-ning yana bir xususiyati so'rovlarning avtomatik deduplikatsiyasidir. Agar navbatga bir xil URL-ga bir xil parametrlar bilan ikkita bir xil GET so'rovi qo'shilsa, Volley ulardan faqat bittasini bajaradi va bir xil javobni ikkala callback-ga qaytaradi. Bu bir nechta komponentlar mustaqil ravishda bir xil ma'lumotlarni so'raydigan ekranlar uchun ayniqsa foydalidir — masalan, bir vaqtning o'zida ham sarlavhaga, ham sozlamalar bilan fragmentga kerak bo'lgan foydalanuvchi profili.

Volley-da so'rovning hayot aylanishi

Har bir so'rov qadamlar ketma-ketligidan o'tadi: Request yaratish, RequestQueue-ga qo'shish, keshni tekshirish (CacheDispatcher), HTTP so'rovini bajarish (NetworkDispatcher), Response.Listener orqali javobni pars qilish, natijani UI oqimiga yetkazish. So'rov bekor qilinganda (cancel) RequestQueue uni navbatdan olib tashlaydi va callback-larning chaqirilishining oldini oladi.

Volley shuningdek RetryPolicy-ni qo'llab-quvvatlaydi, u nosozliklar paytida qayta urinishlar sonini belgilaydi. DefaultRetryPolicy odatiy bo'lib 2.5 soniya taym-aut bilan bitta qayta urinishni amalga oshiradi. Beqaror ulanishlar uchun qayta urinishlar sonini 3 ga, taym-autni esa 10 soniyagacha oshirish mumkin. Maxsus RetryPolicy getCurrentTimeout, getCurrentRetryCount va retry metodlari bilan RetryPolicy interfeysi orqali amalga oshiriladi.

Volley so'rov turlari

Volley ma'lumotlarning mashhur formatlari uchun tayyor so'rov turlarini taqdim etadi. Har bir tur Request<T> abstrakt sinfini amalga oshiradi va javobni pars qilish usulini belgilaydi. Maxsus formatlar uchun parseNetworkResponse metodini bekor qilish orqali o'z turingizni yaratishingiz mumkin.

So'rov turiQaytariladigan turMaqsad
StringRequestStringXom matnli javobni olish
JsonObjectRequestJSONObjectJSON obyektini pars qilish
JsonArrayRequestJSONArrayJSON massivini pars qilish
ImageRequestBitmapRasmni yuklash va dekodlash
ClearCacheRequestVolley keshlarini tozalash

Maxsus so'rovlar

Gson yoki Kotlinx Serialization bilan ishlash uchun parseNetworkResponse da tanlangan parserdan foydalanadigan maxsus Request<T> yaratishingiz mumkin. Bu JSONObject-ni qo'lda pars qilishni chetlab o'tib, to'g'ridan-to'g'ri tiplangan obyektlarni olish imkonini beradi. Bunday yondashuv Gson yoki Moshi orqali serializatsiyadan foydalanadigan loyihalar uchun ayniqsa foydalidir.

Ma'lumot yuborish uchun Volley uch turdagi tanani qo'llab-quvvatlaydi: JSONObject (POST metodi bilan JsonObjectRequest orqali), Form-encoded (konstruktorda HashMap<String, String> orqali) va Multipart (maxsus MultipartRequest orqali). Multipart so'rovlari rasmlar va fayllarni yuklash uchun foydali, ammo qo'lda amalga oshirishni talab qiladi, chunki Volley OkHttp yoki Dio-dan farqli ravishda multipart/form-data uchun o'rnatilgan qo'llab-quvvatlashga ega emas.

Volley-ning cheklovlari katta javoblar bilan ishlashda sezilarli bo'ladi. Volley javobni callback-ga uzatishdan oldin uni to'liq xotiraga yuklaydi, bu esa 10–20 MB dan katta JSON fayllari uchun OutOfMemoryError ga olib kelishi mumkin. Katta fayllarni yuklash uchun Volley mos emas — DownloadManager yoki oqimli ResponseBody bilan OkHttp dan foydalaning. Volley shuningdek uzilgan yuklashlarni davom ettirishni (Range header) qo'llab-quvvatlamaydi va real vaqt rejimida Server-Sent Events yoki WebSocket kabi oqim protokollari bilan ishlamaydi.

Java va Kotlin-da Volley kod namunalari

Asosiy misolni ko'rib chiqaylik — serverdan ma'lumot olish uchun StringRequest. Avval Volley.newRequestQueue(context) orqali RequestQueue yaratiladi. Keyin URL va muvaffaqiyat/xato callback-lari bilan so'rov shakllantiriladi.

kotlin
val queue = Volley.newRequestQueue(context)

val request = StringRequest(
    Request.Method.GET,
    "https://api.github.com/users/octocat",
    { response ->
        println("Javob: $response")
    },
    { error ->
        println("Xato: ${error.message}")
    }
)

queue.add(request)

JSON so'rovi uchun javobni avtomatik ravishda JSONObject-ga pars qiladigan JsonObjectRequest ishlatiladi. Volley GET va POST so'rovlarini qo'llab-quvvatlaydi. POST uchun so'rov tanasida JSONObject uzatiladi.

kotlin
val jsonBody = JSONObject()
jsonBody.put("name", "New Repo")
jsonBody.put("description", "Created via Volley")

val request = JsonObjectRequest(
    Request.Method.POST,
    "https://api.github.com/user/repos",
    jsonBody,
    { response ->
        println("Yaratildi: ${response.getString("id")}")
    },
    { println("Xato: $it") }
)

queue.add(request)

So'rovlarni bekor qilish

So'rovni bekor qilish uchun cancel() metodi yoki teg bo'yicha guruhli bekor qilish ishlatiladi. Bekor qilinganda Volley na onResponse, na onErrorResponse ni chaqiradi, bu ekrandan chiqqandan keyin interfeysni yangilashning oldini oladi. Bu Activity va Fragment da xotira sizib chiqishining oldini olish uchun muhimdir.

kotlin
request.tag = "profile_request"
queue.add(request)

// Ekrandan chiqishda bekor qilish
queue.cancelAll("profile_request")

ImageLoader va NetworkImageView

ImageLoader — RequestQueue ustidagi, rasmlarni yuklash uchun optimallashtirilgan o'rama sinfidir. U xotira keshini (LruCache) qo'llab-quvvatlaydi va RecyclerView ro'yxatlarida ImageView qayta ishlatilganda so'rovlarni avtomatik bekor qiladi. ImageLoader shuningdek rasmlarni View o'lchamiga moslashtirib, xotirani tejaydi.

NetworkImageView — ImageLoader bilan integratsiyalashgan va yuklashni avtomatik boshqaradigan maxsus View: yuklash vaqtida placeholder o'rnatadi, nosozlikda xato bilan almashtiradi va View ekrandan chiqqanda so'rovni bekor qiladi. DefaultImageUrlLoader rasmni URL bo'yicha yuklaydi va tez qayta ko'rsatish uchun LruCache da saqlaydi.

ImageLoader dan foydalanish uchun ImageLoader(queue, ImageCache) orqali namuna yaratish kifoya, bu yerda ImageCache ichida LruCache bo'lgan ImageCache interfeysining amalga oshirilishidir. XML dagi NetworkImageView setImageUrl() metodi orqali ImageLoader ga bog'lanadi va butun yuklash placeholder va xatolarni qayta ishlash uchun qo'shimcha kodsiz to'liq avtomatik ravishda amalga oshadi.

Volley bilan ishlashda tipik xatolar

Har bir Activity da RequestQueue yaratish — oqimlarning takrorlanishiga va keshda chalkashlikka olib keladigan keng tarqalgan xato. RequestQueue ni bir marta Application da yoki singleton sinf orqali yaratish tavsiya etiladi. Aks holda har bir ekran o'z oqimlar hovuziga ega bo'ladi va kesh har bir navbat uchun alohida saqlanadi.

Ekran aylantirilganda so'rovlarni bekor qilishni e'tiborsiz qoldirish. Konfiguratsiya o'zgarganda Activity qayta yaratiladi va eski Activity ning callback-lari xotirada qoladi. Bu xotira sizib chiqishiga va yo'q qilingan View ni yangilashga urinishga olib keladi. Har doim onStop() ichida Activity uchun maxsus teg bilan cancelAll() orqali so'rovlarni bekor qiling.

Volley HTTP/2 va korutinlarni qo'llab-quvvatlamaydi — bu foydalanish xatosi emas, balki arxitektura cheklovidir. Volley 2013-yilda yaratilgan va zamonaviy protokollar va Kotlin korutinlarini qo'llab-quvvatlamaydi. Yangi loyihalar uchun Google Retrofit + OkHttp dan foydalanishni tavsiya qiladi. Volley faqat legacy loyihalarini qo'llab-quvvatlash yoki minimal tarmoq talablari bo'lgan oddiy ilovalar uchun mos keladi.

Tez-tez beriladigan savollar

2025-yilda Volley dan foydalanishga arziydimi?

Volley yangi loyihalar uchun eskirgan — Google kutubxonani 2017-yildan beri yangilamagan. Zamonaviy ilovalar uchun Retrofit + OkHttp yoki Ktor Client dan foydalaning. Volley faqat mavjud legacy kodni qo'llab-quvvatlash yoki minimal tarmoq vazifalari bo'lgan oddiy o'quv loyihalarida qo'llanilishi mumkin.

Volley ning asosiy kamchiligi nimada?

Zamonaviy texnologiyalarni qo'llab-quvvatlamaslik: HTTP/2, Kotlin korutinlari, ko'p platformalilik va tiplangan serializatsiya. Volley turlarsiz JSONObject va JSONArray dan foydalanadi, bu JSON strukturasi kutilganlarga mos kelmaganda runtime xatolariga olib keladi.

Volley rasmlarni qanday qayta ishlaydi?

ImageLoader va NetworkImageView orqali. ImageLoader rasmlarni xotirada keshlash uchun LruCache dan foydalanadi va View qayta ishlatilganda so'rovlarni avtomatik bekor qiladi. NetworkImageView yuklash vaqtida placeholder ko'rsatadi va uni tayyor rasm yoki xato ko'rsatkichi bilan almashtiradi.

Volley ni korutinlar bilan ishlatish mumkinmi?

Texnik jihatdan ha — Volley callback-lari ustida suspendCoroutine { } o'rami orqali. Ammo bu afzallik bermaydi, chunki Volley korutinani bekor qilish orqali bekor qilishni qo'llab-quvvatlamaydi va to'g'ridan-to'g'ri Dispatchers.IO bilan ishlamaydi. Korutinlar uchun native qo'llab-quvvatlash bilan Ktor Client dan foydalanish yaxshiroq.

Volley da taym-autni qanday sozlash mumkin?

Taym-aut RetryPolicy orqali sozlanadi. Odatiy bo'lib DefaultRetryPolicy 2.5 soniya taym-aut va bitta qayta urinishdan foydalanadi. Parametrlarni o'zgartirish: request.retryPolicy = DefaultRetryPolicy(10000, 1, 1.0f) — 10 soniya taym-aut, bitta urinish.

Xulosa

  • Volley — avtomatik oqim boshqaruvi va keshlash bilan Google-dan tarmoq kutubxonasi
  • RequestQueue so'rovlarni CacheDispatcher va NetworkDispatcher o'rtasida taqsimlaydi
  • StringRequest, JsonObjectRequest va ImageRequest — Volley-ning tayyor so'rov turlari
  • ImageLoader LruCache orqali xotira keshlash bilan rasmlarni yuklaydi
  • Prioritetlashtirish (low, normal, high) navbatda bajarish tartibini boshqaradi
  • Volley eskirgan — yangi loyihalar uchun Retrofit + OkHttp yoki Ktor dan foydalaning
  • So'rovlarni teg bo'yicha bekor qilish ekran aylantirilganda xotira sizib chiqishining oldini olish uchun majburiydir

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing