Inactive — mohiyati, Active va Background oʼrtasidagi oʼtish holati

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

Inactive — ilovaning hayotiy siklining Active va Background oʼrtasidagi oʼtish holati boʼlib, bunda ilova ekranda koʼrinadi, lekin teginish hodisalarini qabul qilmaydi. Inactive iOS va Android-da qanday paydo boʼlishini, qaysi delegat metodlari unga javob berishini va uzilishlar — qoʼngʼiroqlar, bildirishnomalar va tizim imo-ishoralarini qanday toʼgʼri boshqarishni tushuntiramiz.

Asosiy maʼlumotlar

  • Inactive — ilova ekranda koʼrinadi, lekin tizim uzilishi sababli teginish hodisalarini qabul qilmaydi
  • applicationWillResignActive — iOS-da Inactive-ga oʼtishni bildiruvchi asosiy metod
  • Vaqtinchalik xarakter — Inactive soniyaning ulushlaridan bir necha soniyagacha davom etadi, soʼng Active yoki Background-ga oʼtish boʼladi
  • Sabablar — kiruvchi qoʼngʼiroq, Control Center, Notification Center, tizim ogohlantirishi, Apple Pay, Siri
  • SwiftUI — scenePhase .inactive UIKit-dagi Inactive-ga ekvivalent

Inactive — oʼtish holatining mohiyati

Inactive — mobil ilovaning hayotiy siklida Active va Background oʼrtasidagi oʼtishda paydo boʼladigan oraliq holat. Bu holatda ilova hali ham oldingi planda va foydalanuvchiga koʼrinadi, lekin teginish hodisalari, tugma bosishlari va boshqa UI hodisalarini qabul qilmaydi. Tizim hodisalarning ilovaga uzatilishini bloklaydi, biroq UI ekranda qoladi va yigʼishilmaydi.

Inactivening tabiati vaqtinchalik. Bu holat tizim uzilishi qancha davom etsa, shuncha davom etadi: Control Centerni tez yopishda 0.1 soniyadan qoʼngʼiroq ekrani bilan kiruvchi qoʼngʼiroqda bir necha soniyagacha. Uzilish tugagandan soʼng, ilova yoki Active-ga qaytadi, yoki foydalanuvchi boshqa ilovaga oʼtgan boʼlsa Background-ga oʼtadi. Inactive ikkala yoʼnalishda ham oʼtish mumkin boʼlgan yagona holatdir: orqaga Active-ga yoki keyin Background-ga.

iOS-da Inactive tizim tomonidan avtomatik boshqariladi. Dasturchi Inactive-da qolish vaqtini uzaytira yoki qisqartira olmaydi — bu toʼliq UIApplication tomonidan nazorat qilinadi. Dasturchi qila oladigan yagona narsa — applicationWillResignActive orqali Inactive-ga kirishni va applicationDidBecomeActive orqali qaytishni toʼgʼri boshqarishdir. Android-da analog onPause hisoblanadi, garchi semantika farq qilsa-da: onPause hatto Activity boshqa komponent tomonidan qisman yopilganda ham chaqiriladi.

iOS va Android-da Inactive solishtirish

iOS-da Inactive ilovaning hayotiy siklining alohida holati (besh holatdan biri: Not Running, Active, Inactive, Background, Suspended). Android-da toʼgʼridan-toʼgʼri analog yoʼq — onPause Activity kirish fokusini yoʼqotayotganini bildiradi, lekin koʼrinadigan boʼlib qolishi mumkin (masalan, dialog ochilganda). Asosiy farq: iOS Inactive — butun ilovaning holati, Android onPause — maʼlum Activity-ning holati. Android-da multi-window rejimida bir Activity onPause-da (fokusiz), boshqasi onResume-da (fokus bilan) boʼlishi mumkin.

XususiyatiOS InactiveAndroid onPause
UI koʼrinadiHaHa (qisman yoki toʼliq)
Teginish hodisalariQabul qilmaydiQabul qilmaydi
DavomiylikUzilish tugagunchaFokus qaytguncha yoki fonda ketguncha
Keyingi holatActive yoki BackgroundonResume yoki onStop
DarajaIlova (UIApplication)Activity
Multi-windowBitta sahna faolBir nechta Activity onPause-da

Inactive qachon paydo boʼladi

Inactive iOS-da bir nechta qatʼiy belgilangan stsenariylarda paydo boʼladi. Foydalanuvchi Control Centerni chaqiradi (iPhone X+ da oʼng yuqori burchakdan pastga surish yoki eski modellarda yuqoriga surish). Foydalanuvchi Notification Centerni ochadi (chap yuqori burchakdan pastga surish). Kiruvchi qoʼngʼiroq keladi — tizim ilova ustida qoʼngʼiroq ekranini koʼrsatadi. Tizim ruxsati soʼraladi — geolokatsiya, mikrofon, kamera, kontaktlar. iPad-da Slide Over yoki Split View ishga tushiriladi — faol sahna Inactive boʼladi.

Android-da onPause (Inactive analogi) yanada kengroq vaziyatlarda paydo boʼladi. Dialog oynasining ochilishi (AlertDialog, DialogFragment). Activity-ning boshqa Activity tomonidan qisman yopilishi (masalan, avtorizatsiya uchun shaffof Activity). Ekranning aylanishi (Activity qayta yaratiladi, ketma-ketlik: onPause → onStop → onDestroy → onCreate → onStart → onResume). Multi-window rejimi — faol boʼmagan oyna onPause oladi. Ushbu hodisalarning har biri batareyani tejash va unumdorlik uchun resurs talab qiluvchi operatsiyalarni toʼlatishni talab qiladi.

swift
import UIKit

extension Notification.Name {
    static let systemInterruptionBegan = Notification.Name("systemInterruptionBegan")
    static let systemInterruptionEnded = Notification.Name("systemInterruptionEnded")
}

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func applicationWillResignActive(_ application: UIApplication) {
        // Ilova Inactive-ga oʼtadi — tizim uzilishi
        print("Uzilish: Control Center, qoʼngʼiroq yoki tizim ogohlantirishi")

        // Vaqtga sezgir operatsiyalarni toʼlatish
        pauseVideoPlayback()
        stopContinuousDataCollection()
        hideSensitiveInformation()

        // Komponentlarni xabardor qilish
        NotificationCenter.default.post(name: .systemInterruptionBegan, object: nil)
    }

    // Inactive-dan Active-ga qaytish
    func applicationDidBecomeActive(_ application: UIApplication) {
        resumeVideoPlayback()
        restartDataCollection()
        NotificationCenter.default.post(name: .systemInterruptionEnded, object: nil)
    }

    private func pauseVideoPlayback() {
        // Ovoz ustma-ust tushmasligi uchun videoni toʼlatish
    }

    private func hideSensitiveInformation() {
        // Ekran skrinshotida nozik maʼlumotlarni yashirish
        // Control Center/App Switcher UI skrinshotini oladi
    }
}

Kodda UIKit-da Inactiveni boshqarish koʼrsatilgan. applicationWillResignActive videoni toʼlatadi, maʼlumot yigʼishni toʼlatadi va nozik maʼlumotlarni yashiradi. Bu muhim, chunki Control Center yoki App Switcher ochilganda tizim joriy UI ning skrinshotini oladi — foydalanuvchi oldindan koʼrishda maxfiy maʼlumotlarni koʼ rishi mumkin. NotificationCenter ilova komponentlariga uzilish hodisalariga obuna boʼlish imkonini beradi.

iOS-da Inactive: Swift va UIKit

iOS-da Inactive bir juft metod tomonidan boshqariladi: applicationWillResignActive (Inactive-ga kirish) va applicationDidBecomeActive (Inactive-dan qaytish). Bu metodlar UIApplicationDelegate-ning bir qismi boʼlib, har bir Inactive orqali oʼtishda chaqiriladi. iOS 13 va UISceneDelegate-dan boshlab, ularga multi-window stsenariylari uchun sceneWillResignActive va sceneDidBecomeActive qoʼshilgan.

SceneDelegate va multi-window Inactive

iOS 13+ bilan iPad-da ilova bir nechta sahna (oyna) ga ega boʼlishi mumkin. Har bir sahna oʼzining hayotiy sikliga ega. Bir sahna Inactive boʼlishi mumkin (foydalanuvchi boshqa sahnaga oʼtdi), boshqasi esa Active boʼlib qoladi. Bu muhim farqdir iPhone-dan farqli oʼlaroq, bu yerda Inactive butun ilova uchun global holatdir. iPad uchun ilova ishlab chiqishda Inactive har bir sahna uchun alohida boshqarilishi kerak.

swift
import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    // Sahna faol boʼmay qoladi
    func sceneWillResignActive(_ scene: UIScene) {
        // iPad-da bu sahna fokusni yoʼqotadi, lekin boshqalar faol boʼlishi mumkin
        print("Sahna faollikni yoʼqotadi")

        // Bu sahnaning vazifalarini toʼlatish
        pauseSceneSpecificOperations()
    }

    // Sahna faol boʼladi
    func sceneDidBecomeActive(_ scene: UIScene) {
        print("Sahna faol boʼldi")
        resumeSceneSpecificOperations()
    }

    private func pauseSceneSpecificOperations() {
        // Bu sahna uchun maxsus operatsiyalarni toʼlatish
    }

    private func resumeSceneSpecificOperations() {
        // Fokus qaytganda operatsiyalarni tiklash
    }
}

// AppDelegate kirish nuqtasi boʼlib qoladi, sahnalarga topshiradi
@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        _ application: UIApplication,
        configurationForConnecting connectingSceneSession: UISceneSession,
        options: UIScene.ConnectionOptions
    ) -> UISceneConfiguration {
        return UISceneConfiguration(
            name: "Default Configuration",
            sessionRole: connectingSceneSession.role
        )
    }
}

Kodda sahna darajasida Inactiveni boshqarish uchun SceneDelegate koʼrsatilgan. sceneWillResignActive muayyan oyna fokusni yoʼqotganda chaqiriladi — bu iPad-da oynalar oʼrtasida oʼtishda sodir boʼlishi mumkin. AppDelegate multi-window qoʼllab-quvvatlash uchun UISceneConfiguration-ni sozlaydi. Har bir sahna mustaqil holatga ega va dasturchi ularni alohida boshqarishi kerak.

Android-da Inactive: onPause va koʼrinuvchanlik

Android-da iOS Inactivening toʼgʼridan-toʼgʼri analogi Activity hayotiy siklidagi onPause() metodidir. Activity kirish fokusini yoʼqotganda chaqiriladi, lekin koʼrinadigan boʼlib qolishi mumkin. Oddiy stsenariylar: dialog oynasining ochilishi, bir xil ilovada boshqa Activity-ni ishga tushirish, kiruvchi qoʼngʼiroq, Home yoki Recents tugmasini bosish. onPause-da dasturchi resurs talab qiluvchi operatsiyalarni — animatsiyalar, video ijro etish, kamera bilan ishlashni toʼlatishi kerak.

Android-ning muhim farqi — onPause har doim onStop-dan oldin keladi, lekin aksi toʼgʼri emas. Activity onStop-siz onPause olishi mumkin (masalan, shaffof Activity ochilganda). Shuningdek, onPause Activity hayoti davomida bir necha marta chaqirilishi mumkin — har bir fokus oʼzgarishida. onPause-ga bir martalik mantiqni joylashtirmang — yakuniy operatsiyalar uchun onStop-dan, faqat interaktiv harakatlarni toʼlatish uchun onPause-dan foydalaning.

kotlin
class VideoPlayerActivity : AppCompatActivity() {

    private var exoPlayer: ExoPlayer? = null
    private var currentPosition: Long = 0L

    override fun onPause() {
        super.onPause()
        // Ilova fokusni yoʼqotadi — videoni toʼlatamiz
        exoPlayer?.let { player ->
            if (player.isPlaying) {
                currentPosition = player.currentPosition
                player.pause()
            }
        }
        // Nozik maʼlumotlarni yashiramiz (GDPR/bank ekranlari)
        if (window.decorView.systemUiVisibility and
            View.SYSTEM_UI_FLAG_SECURE == 0
        ) {
            hideSensitiveOverlay()
        }
    }

    override fun onResume() {
        super.onResume()
        // Fokus qaytishi — ijro etishni tiklaymiz
        exoPlayer?.seekTo(currentPosition)
        exoPlayer?.play()
        showSensitiveOverlay()
    }

    private fun hideSensitiveOverlay() {
        // Moliyaviy maʼlumotlar ustiga qora ekran qoʼyamiz
    }
}

Kodda video pleer uchun onPause-ni toʼgʼri boshqarish koʼrsatilgan. ExoPlayer toʼlatiladi fokus yoʼqolganda va ijro etish pozitsiyasi saqlanadi. onResume-ga qaytganda pleer saqlangan pozitsiyadan ijro etishni tiklaydi. Qoʼshimcha ravishda nozik maʼlumotlarni yashirish namunasi koʼrsatilgan — oʼtishda skrinshotlardan himoya talab qiladigan moliyaviy va tibbiy ilovalar uchun muhim.

Inactiveni boshqarish boʼyicha eng yaxshi amaliyotlar

Birinchi qoida — Inactive-ga oʼtishda maxfiy maʼlumotlarni yashiring. Foydalanuvchi Control Center yoki App Switcherni ochganda iOS joriy ekranning skrinshotini oladi. Android-da ham xuddi shunday — tizim Recents-da oxirgi Activity-ning oldindan koʼrinishini koʼrsatadi. Maxfiy ekranlarni himoya qilish uchun UIApplication.shouldSnapshotSecureApp (iOS 16+) yoki FLAG_SECURE (Android) dan foydalaning.

Ikkinchi qoida — animatsiyalar va mediani toʼlating. Inactive video yoki animatsiyalarni ijro etish uchun eng yaxshi vaqt emas, chunki foydalanuvchi ularni koʼrmaydi. Bundan tashqari, fonda ijro etish tovushlarning tizim tovushlari (qoʼngʼiroq, bildirishnoma) bilan ustma-ust tushishiga olib kelishi mumkin. Inactive-ga oʼtishda AVPlayer, ExoPlayer va UIView.animate-ni toʼlating va Active-ga qaytganda tiklang.

Uchinchi qoida — maʼlumot kiritishni bloklang. Ilova kiritish formalari yoki qoralamalarni oʼz ichiga olgan boʼlsa, Inactive-ga oʼtishda klaviatura va kiritish maydonlarini bloklang. Bu qaytganda tasodifiy kiritishning oldini oladi va maʼlumotlarning tizim qoplamalari orqali tutilishidan himoya qiladi. iOS-da first responder-ni oʼhiring (view.endEditing(true)), Android-da — fokusni tozalang (currentFocus?.clearFocus()).

Toʼrtinchi qoida — applicationWillResignActive yoki onPause-da uzoq operatsiyalarni bajarmang. Bu metodlar soniyaning ulushlarida tugallanishi kerak. Katta hajmdagi maʼlumotlarni saqlash kerak boʼlsa, saqlashni fon thread-da boshlang va applicationDidEnterBackground yoki onStop-da tugallang. iOS applicationWillResignActive-ni bajarish uchun 5 soniya beradi, shundan soʼng tizim ilovani majburiy tugatishi mumkin.

swift
import UIKit

final class SecureOverlayManager {
    private var blurView: UIVisualEffectView?

    func showBlurOverlay() {
        guard let window = UIApplication.shared.keyWindow,
              blurView == nil
        else { return }

        let blur = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
        blur.frame = window.bounds
        blur.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        window.addSubview(blur)
        blurView = blur
    }

    func removeBlurOverlay() {
        blurView?.removeFromSuperview()
        blurView = nil
    }
}

// AppDelegate-da foydalanish
func applicationWillResignActive(_ application: UIApplication) {
    SecureOverlayManager().showBlurOverlay()
}

func applicationDidBecomeActive(_ application: UIApplication) {
    SecureOverlayManager().removeBlurOverlay()
}

Kodda Inactive-ga oʼtishda maʼlumotlarni himoya qilish uchun xavfsiz qoplama koʼrsatilgan. Blur effekti bilan UIVisualEffectView Inactive-ga oʼtishda butun UI ustiga qoʼyiladi va Active-ga qaytganda olib tashlanadi. Bu maxfiy maʼlumotlarning App Switcher va Control Center skrinshotlarida koʼrinmasligini kafolatlaydi. Xuddi shunday, brendlashtirilgan qoplama uchun logotip bilan UIImageView ishlatilishi mumkin.

Tez-tez beriladigan savollar

Inactive har doim Background-dan oldin keladimi?

Ha. Inactive iOS-da Background-ga oʼtishdan oldin majburiy oraliq holatdir. Ilova Active-dan toʼgʼridan-toʼgʼri Background-ga oʼta olmaydi — avval Inactive, keyin Background boʼladi. Android-da ham xuddi shunday: onPause har doim onStop-dan oldin chaqiriladi. Bu dasturchiga toʼliqlik bilan fonda ketishdan oldin maʼlumotlarni saqlashga tayyorlash imkoniyatini beradi.

Ilova uzilishsiz Inactive olishi mumkinmi?

Ha. iPad-da Slide Over yoki Split View ishga tushirilganda faol sahna Inactive boʼladi, hech qanday tizim uzilishi boʼlmasa ham — foydalanuvchi shunchaki boshqa sahna bilan oʼzaro aloqada boʼladi. Bu iPadOS multi-window xususiyati. iPhone-da Inactive har doim tizim uzilishi — qoʼngʼiroq, bildirishnoma, Control Center yoki Notification Center tomonidan chaqiriladi.

Ilova qancha vaqt Inactive-da qolishi mumkin?

Odatda 0.1 dan 2 soniyagacha. Qoʼngʼiroq ekrani bilan kiruvchi qoʼngʼiroqda — 30 soniyagacha (foydalanuvchi javob berguncha yoki qoʼngʼiroqni rad etguncha). iOS Inactive-da vaqtni majburiy cheklamaydi, lekin ilova hodisalarga javob bermasa (watchdog) tizim uni tugatishi mumkin. Android-da onPause vaqt chekloviga ega emas, lekin ishni 200 ms ichida tugatish tavsiya etiladi.

SwiftUI-da Inactive paytida scenePhase nima?

ScenePhase.inactive — sahna oldingi planda boʼ lganda, lekin hodisalarni qabul qilmasdan turganda oʼrnatiladigan ScenePhase enum qiymati. SwiftUI-da uni @Environment(\.scenePhase) orqali kuzatishingiz va onChange bilan reaksiya berishingiz mumkin. .active-dan .inactive-ga oʼtishda taymerlar va animatsiyalarni toʼlating. .active-ga qaytganda — tiklang. .background-ga oʼtishda — holatni saqlang.

Barcha ilovalar uchun Inactive paytida UI ni yashirish kerakmi?

Yoʼq, faqat maxfiy maʼlumotlar bilan ishlaydigan ilovalar uchun: bank, tibbiy, korporativ, shaxsiy suhbatlar bilan messenjerlar. Oʼyinlar va koʼngilochar ilovalar uchun UI ni yashirish talab qilinmaydi. Biroq, Inactive paytida oʼyin jarayonini va tovushni toʼlatish yaxshi amaliyotdir, bu tovushlarning tizim bildirishnomalari bilan ustma-ust tushishining oldini oladi. Apple nozik maʼlumotlarni yashirishni tavsiya qiladi, lekin buni talab qilmaydi.

Xulosa

  • Inactive — Active va Background oʼrtasidagi oʼtish holati, ilova koʼrinadi lekin interaktiv emas
  • Sabablar — Control Center, Notification Center, kiruvchi qoʼngʼiroq, tizim ruxsatlari, Siri, Apple Pay
  • iOS boshqaruvi — animatsiyalar, mediani toʼlatish va nozik maʼlumotlarni yashirish uchun applicationWillResignActive
  • SwiftUI — Environment orqali scenePhase .inactive, yon taʼsirlar uchun onChange
  • Android — onPause analog sifatida, multi-window va Activity-ning qisman yopilishini qoʼl lab-quvvatlash bilan
  • Xavfsizlik — App Switcher va Control Center skrinshotlaridan himoya qilish uchun blur qoplama yoki FLAG_SECURE
  • Vaqtinchalik xarakter — Inactive uzilish tugaguncha davom etadi, soʼng Active-ga qaytish yoki Background-ga oʼtish

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