Görev dağıtıcı ayarlama

Güçlü bir gezinme sistemi uygulamak için uygulamanızın geri hareketlerini ve diğer gezinme sinyallerini merkezi bir şekilde işlemesi gerekir. Bu sayfada, bu gezinme etkinliklerini uygulamanızda koordine etmek ve dağıtmak için NavigationEventDispatcher'in nasıl kullanılacağı açıklanmaktadır.

NavigationEventDispatcher tanımlama

NavigationEventDispatcher, NavigationEvent kitaplığının temel bileşenidir. Geri hareketleri ve gezinme geçişleri gibi gezinmeyle ilgili etkinlikleri uygulamanızdaki kayıtlı dinleyicilere gönderen bir etkinlik merkezi olarak işlev görür. Bileşenler, gezinme değişikliklerine veya sistem tarafından yönlendirilen diğer gezinme işlemlerine tepki vermek için bu etkinliklere abone olabilir.

NavigationEventDispatcher örneklerini NavigationEventDispatcherOwner aracılığıyla sağlamalısınız. Bu sayede, uygulamanızın farklı bölümleri aynı dağıtıcıya erişebilir ve gezinme etkinliklerini tutarlı ve koordineli bir şekilde gözlemleyebilir.

class MyComponent: NavigationEventDispatcherOwner {
    override val navigationEventDispatcher: NavigationEventDispatcher =
        NavigationEventDispatcher()
}

ComponentActivity içindeyseniz kendi göndericinizi uygulamak yerine sizin için sağlanan göndericiyi alabilirsiniz.

class MyCustomActivity : ComponentActivity() {
    fun addMyHandler() {
        // navigationEventDispatcher provided by the ComponentActivity
        navigationEventDispatcher.addHandler(myNavigationEventHandler)
    }
}

NavigationEventInput ekleyin

İşleyiciyi kaydettiğinize göre artık etkinlikleri almaya hazırsınız. Ancak, etkinliklerin oluşturulduğu bir kaynak sağlamanız gerekir NavigationEventInput.

NavigationEventInput, ham sistem girişini alan ve bunu NavigationEventDispatcher'ye gönderilecek standart bir NavigationEvent'ye çeviren platforma özgü bileşendir.

Aşağıdaki örnek, NavigationEventInput öğesinin özel bir uygulamasıdır:

public class MyInput : NavigationEventInput() {
    @MainThread
    public fun backStarted(event: NavigationEvent) {
        dispatchOnBackStarted(event)
    }

    @MainThread
    public fun backProgressed(event: NavigationEvent) {
        dispatchOnBackProgressed(event)
    }

    @MainThread
    public fun backCancelled() {
        dispatchOnBackCancelled()
    }

    @MainThread
    public fun backCompleted() {
        dispatchOnBackCompleted()
    }
}

Ardından, bu girişi dağıtıcınıza sağlayın:

navigationEventDispatcher.addInput(MyInput())

dispose() ile kaynakları temizleme

Dinamik bir kullanıcı arayüzünde bellek sızıntılarını önlemek için oluşturulan her NavigationEventDispatcher örneği, bağlı olduğu bileşen yok edildiğinde dispose() yöntemi kullanılarak hiyerarşiden açıkça kaldırılmalıdır:

navigationEventDispatcher.dispose()

dispose() yöntemi, göndericiyi ve tüm alt öğelerini (çocuklar ve torunlar) yinelemeli olarak kaldırarak kademeli bir temizleme sağlar. Böylece, ilişkili tüm işleyicilerin paylaşılan sistemden kaydı iptal edilir.

Dağıtıcı hiyerarşisi ve kontrolü

NavigationEventDispatcher, üst-alt hiyerarşisini destekleyerek kullanıcı arayüzünde iç içe yerleştirilmiş bileşenlerin (ör. iç içe yerleştirilmiş NavHost'ler veya iletişim kutuları) gezinme etkinliği işlemeye katılmasını sağlar.

Alt görev dağıtıcı oluşturma

Bir alt dağıtıcı, oluşturma sırasında üst dağıtıcısına referans geçirilerek oluşturulur. Hiyerarşideki tüm dağıtıcılar, önceliğe dayalı olarak genel bir son giren ilk çıkar (LIFO) etkinlik sıralaması sağlamak için aynı NavigationEventProcessor değerini paylaşır.

Hiyerarşik etkinleştirme

Gönderici, geliştiricilerin bir işleyici alt ağacının tamamını tek seferde etkinleştirmesine veya devre dışı bırakmasına olanak tanıyan bir isEnabled özelliği içerir.

Bir üst dağıtıcı devre dışı bırakıldığında (isEnabled = false), bu üst öğeyle ve alt öğeleriyle ilişkili tüm işleyiciler, etkinleştirilmiş durumlarından bağımsız olarak yoksayılır.