Android Orta Düzey ve İleri Düzey Mülakat Soruları Sürekli Destek: Android Bağlayıcı Mekanizmasını Gösterme

Önsöz

Android'in temel mekanizması olan Binder, Android sistemini anlamak için çok önemlidir. Binder hakkında da pek çok makale var, ancak onu her okuduğumda gerçekten anlamıyorum. Ciltleme mekanizması nedir? Neden bağlayıcı mekanizma kullanılıyor? Bağlayıcı mekanizması nasıl çalışır? Bu problemler bağlayıcı mekanizmayı anlamak için yeterli değil.Tüm Android sisteminden analiz edilmesi gerekiyor.Birçok bilgi bulduktan sonra, cilt mekanizmasını gerçekten anladım.Bu makaleyi okuduktan sonra herkesin cilt mekanizmasını anlayabileceğine inanıyorum.

1. Binder nedir?

Bağlayıcıyı anlamak için önce IPC'yi, süreçler arası iletişimi, yani süreçler arası iletişimi bilmelisiniz.Binder, Android tarafından sağlanan bir dizi süreçler arası iletişim çerçevesidir. Birden fazla işlem arasında mesaj göndermek, hafızayı senkronize etmek ve paylaşmak için kullanılır. Mevcut süreçler arası iletişim yöntemleri aşağıdaki gibidir:

1. Dosya dosya sistemi (bellek eşleme dahil) 2. Soketler 3, Borular borusu 4, paylaşılan bellek 5, Amaçlar, ContentProviders, Messenger6, Binder

Android sistemindeki Binder çerçeve şeması aşağıdaki gibidir:

Örnek olarak Activity'i ele alalım: Aktivite, ActivityManager tarafından kontrol edilir ve ActivityManager, ActivityManagerService servisini elde etmek için Binder aracılığıyla Aktiviteyi kontrol eder ve ActivityManager, Android sisteminin FrameWork katmanıdır ve uygulamadaki aktivite ile aynı süreç değildir. .

Odaklanma :

1. Binder, Android tarafından sağlanan bir dizi süreçler arası iletişim çerçevesidir. 2. Sistem hizmetleri ActivityManagerService, LocationManagerService, vb. Ayrı bir süreç içindedir ve uygulama ile iletişim kurmak için bağlayıcı kullanır.

2. Android sistem çerçevesi

Yukarıda gösterildiği gibi, Android sistemi üç katmana ayrılmıştır. Üst katman uygulama katmanı, ikinci katman Çerçeve katmanı ve üçüncü katman yerel katmandır. Aşağıdaki şekilde birkaç nokta görülebilir:

1. Android'deki uygulama katmanı ve sistem hizmeti katmanı aynı süreçte değildir ve sistem hizmeti ayrı bir süreç içindedir. 2. Android'deki farklı uygulamalar farklı süreçlere aittir.

Android uygulamaları ve sistem hizmetleri, güvenlik, kararlılık ve bellek yönetimi nedenleriyle farklı işlemlerde çalışır, ancak uygulamaların ve sistem hizmetlerinin iletişim kurması ve verileri paylaşması gerekir.

avantaj

  • Güvenlik: Her işlem bağımsız olarak çalışır ve bu, uygulama katmanının sistem katmanından izole edilmesini sağlayabilir.
  • Kararlılık: Bir işlem çökerse, diğer işlemlerin çökmesine neden olmaz.

Hafıza tahsisi: Bir işlem gerekmiyorsa, hafızadan çıkarılabilir ve karşılık gelen hafıza geri alınabilir.

3. Bağlayıcı iletişimi

İstemci hizmet hizmeti talep eder, örneğin, Activity, Activity ManagerService hizmetini talep eder Activity ve ActivityManagerService iki farklı süreçte olduğundan, aşağıdaki şekil çok sezgisel bir istek sürecidir.

Ama dikkat et Bir işlem, başka bir işlemden veri okumak veya başka bir işlemin bellek alanına veri yazmak gibi başka bir işlemi doğrudan çalıştıramaz.İşlemler arasındaki iletişim çekirdek işleminden geçmelidir, bu nedenle burada gereklidir İşlem iletişim aracı Binder'ı aşağıda gösterildiği gibi kullanın:

/ Dev / binder aracılığıyla bağlayıcı sürücüsü

/ dev / binder, açma, serbest bırakma, anket yoklama, mmap mmap, flush flush ve ioctl gibi işlemler için arayüz API'leri sağlar. Bu şekilde, süreç A ve süreç B, çekirdek süreci aracılığıyla iletişim kurabilir.

İşlemdeki iletişimin çoğu, ioctl (binderFd, BINDER_WRITE_READ, bwd) aracılığıyla gerçekleştirilir. Bwd'nin tanımı aşağıdaki gibidir:

struct binder_write_read { imzalı uzun yazma_boyutu; / * bayt yazmak için * / imzalı uzun write_consumed; / * sürücü tarafından tüketilen bayt * / imzasız uzun write_buffer; imzalı uzun read_size; / * okunacak bayt * / imzalı uzun read_consumed; / * sürücü tarafından tüketilen bayt * / imzasız uzun read_buffer; };

fakat Yukarıda, istemcinin ve hizmetin doğrudan bağlayıcı sürücüyle ilgilenmesi gerektiği, ancak aslında, istemci ve hizmetin bağlayıcıyla ilgili protokolü bilmek istemediği, bu nedenle istemci bir vekil proxy ve bir saplama ekleyerek hizmet ekleyerek bağlayıcıyla etkileşimi daha da işler.

Bunun avantajı, hem müşterinin hem de hizmetin bağlayıcıyla doğrudan ilgilenmesine gerek olmamasıdır. Yukarıdaki resim çok eksiksiz görünmektedir, ancak Android sistemi, istemcinin Bağlayıcı'nın varlığını bilmesini önlemek için bunu daha da kapsüller.Android sistemi, istemciyi yönetmek için bir Yönetici sağlar. Aşağıda gösterildiği gibi:

Bu şekilde, müşterinin yalnızca yönetici tarafından yönetilmesi gerekir ve süreç iletişimiyle ilgili konularla ilgilenmeye gerek yoktur.Yönetici aslında çok tanıdıktır.Örneğin, etkinlik ActivityManager tarafından kontrol edilir ve ActivityManager, ActivityManagerService'i almak için Bağlayıcı tarafından kontrol edilir. aktivite. Dolayısıyla ActivityManagerService ile iletişim kurmak için Binder kullanmamıza gerek yok.

Ayrıca müşteri hangi hizmeti nasıl elde eder? Aşağıda gösterildiği gibi:

Ayrıca hizmet ile bağlayıcı arasında, yani serviceManager'da bir contextManager vardır.Her hizmetin önce serviceManager'da kaydedilmesi gerekir ve kayıt tamamlandıktan sonra serviceManager tek tip olarak yönetilir. Android stüdyosunda, şu anda serviceManager'a kayıtlı olan hizmeti adb aracılığıyla belirleyebilir ve yazdırabilirsiniz.

$ adb shell hizmet listesi Bulunan 71 hizmet: 0 yudum: 1 telefon: 20 konum: 55 etkinlik: 56 paket: 67 SurfaceFlinger: 68 media.camera: 69 media.player: 70 media.audio_flinger:

Aşağıdaki şekil, müşteri ve hizmet arasında daha eksiksiz bir iletişim sürecidir:

4. Bağlayıcı çerçevesi

Binder çerçevesine bakmadan önce, müşteriden hizmet talep etme sürecinin tamamına bir göz atalım.

Hizmet alma süreci:

ilk adım : İstemci hizmeti talep etmek istiyor, örneğin, etkinlikte bağlam. `` GetSystemService () yöntemini çağırın. Şu anda, serviceManager getService '' (`` ad) 'ı kullanacak ve ardından yerel katmandaki ServiceManagerNative sınıfında getService'i çağıracaktır. (ad) yöntemi.

İkinci adım : ServiceManagerNative, Binder aracılığıyla bir SVG_MGR_GET_SERVICE talimatı gönderecek ve ardından svcmgr_handler () aracılığıyla do_find_service () yöntemini çağırarak svc_list içinde ilgili hizmeti bulacaktır.

üçüncü adım : İlgili hizmeti bulduktan sonra, hizmet Binder aracılığıyla ServiceManagerNative'e geçirilecek ve ardından serviceManager'a geçecek ve son olarak istemci kullanılabilecektir.

Not: Hizmet aslında svclist'te saklanır ve svclist bağlantılı bir listedir, bu nedenle istemci tarafından çağrılan hizmet önce svclist'e kaydedilmelidir.

Kayıt hizmeti süreci:

ilk adım: Hizmet, serviceManager'da addService yöntemini çağırır ve ardından ServiceManagerNative sınıfındaki addservice '' (ad) yöntemini çağırır.

İkinci adım: ServiceManagerNative, Binder aracılığıyla bir SVG_MGR_ADD_SERVICE talimatı gönderir ve ardından svcmgr_handler () aracılığıyla do_add_service () yöntemini çağırarak ilgili hizmeti svc_list'e ekler.

Önemli: İstemci tarafından çağrılmadan önce tüm hizmetler svc_list'e kaydedilmelidir. svc_list, bu hizmetleri bağlantılı liste biçiminde kaydeder.

Bağlayıcı yapı tasarımı Bağlayıcının yapısal tasarımını anlamak için Android mimarisini anlamak gerekir.Android uygulama katmanı, çerçeve katmanı yerel katmanı ve çekirdek katmanına bölünmüştür.Binder tasarımında her katmanda farklı soyutlamalar vardır. Aşağıda gösterildiği gibi:

Yukarıdaki şekilden, Binder'in genel tasarımının dört katmana sahip olduğunu görebiliriz:

1. Java katmanı AIDL. 2. Çerçeve katmanı, Android.os.Binder.

Çerçeve katmanındaki en önemli veri yapısı işlemdir. Birkaç varsayılan vardır:

3. Yerel katman: libBinder.cpp

Yerel katmanda esas olarak libBinder bulunur

4. Çekirdek katmanı Çekirdek katmanındaki iletişim ioctl aracılığıyla gerçekleştirilir İstemci bir ioctl açar, sorgulama sırasına girer ve süre dolana veya bir mesaj gelene kadar bloke eder.

5. Binder'da kullanılan tasarım desenleri

1. Vekil Kalıbı Android'de, müşteri bağlayıcıyla doğrudan etkileşime girmez, müşteri doğrudan Yönetici ile etkileşime girer ve yönetici yönetici ile etkileşime girer.Proxy, bu, müşterinin yönetici Proxy aracılığıyla bağlayıcıyla etkileşime girdiği anlamına gelir. Aynı zamanda hizmet, bağlayıcıyla doğrudan etkileşime girmez, ancak saplama yoluyla bağlayıcıyla etkileşime girer. Aşağıda gösterildiği gibi.

2. Köprü Deseni aşağıdaki şekilde gösterildiği gibidir.Uygulama katmanında, yani Java katmanında MediaPlayer'ı kullanmak için, yerel katmanda MediaPlayer.cpp'yi çağırmak gerekir, ancak MediaPlay.java JNI ile doğrudan ilgilenmez, ancak MediaPlayerSevice ile iletişim kurar ve Binder aracılığıyla geri döner nın-nin.

Bugünün makalesi için bu kadar. Hala çok sayıda resim var. Anlaması daha kolay mı buluyorsunuz?

Sonunda

Hepsi bugünün röportaj paylaşımı için. Aynı cümle. Sadece anlamanız gereken değil, aynı zamanda onları iyi ifade etmeniz gereken bazı şeyler var, böylece görüşmecinin Anlayışınızı tanıyabilmesi için İşleyici mekanizması gibi. Bu, röportajda mutlaka sorulması gereken bir sorudur. . Bazı belirsiz noktalar var, belki sadece röportajda yaşıyor, gerçek işte hiç kullanmayacaksın ama ne olduğunu bilmelisin.

Son olarak, buradaki editör, yukarıdaki teknik sistem şemalarıyla ilgili düzinelerce set koleksiyonunu paylaşıyor. Tencent, Toutiao, Ali, Meituan ve diğer şirketlerden 19 yıl içinde mülakat soruları , Teknik noktaları video ve PDF olarak düzenledi (aslında beklenenden çok daha fazla enerji harcadı), Bilgi bağlamı + birçok ayrıntı , Sınırlı alan nedeniyle, işte resim şeklinde bir parçası.

ve ayrıca Gelişmiş mimari teknolojisi gelişmiş zihin haritası, Android geliştirme röportajı özel materyalleri , Herkesin ileri seviyeyi geliştirmeyi öğrenmesine yardımcı olmak için gelişmiş gelişmiş çerçeve materyalleri ve ayrıca internette öğrenmek için materyal aramak için herkesin zamanından tasarruf sağlar ve ayrıca birlikte öğrenmek için arkadaşlarla paylaşılabilir.

[Android temel ileri teknoloji PDF belgesi, BAT görüşmesindeki gerçek soruların analizi]

[Algoritma Koleksiyonu]

[Android temel bilgi noktalarını genişletin]

[Gelişmiş mimari video öğrenme kaynaklarının Android bölümü]

Android Tanıtım Videosu alıp öğrendikten sonra, daha da güçlü hale geliyor! BATJ fabrikasına girin ve benzeri (hazırlık)! Günümüzde İnternetin soğuk olduğu söyleniyor. Aslında, yanlış arabaya bindiğinizden ve daha az (beceri) giydiğinizden başka bir şey değil. Doğru arabaya binerseniz ve kendi teknik yeteneğiniz yeterince güçlüyse, şirketin değişim maliyeti yüksek olacaktır. Sadece son iş Curd'u ortadan kaldırmak için! Günümüzde piyasada genç programcılar akınına uğramaktadır. Bu eğitim seti 1-6 yaş arası Android geliştirme mühendislerine yöneliktir. Darboğaz dönemindedirler. Gelecek yıl maaş artışlarını aşmak isteyenler, ileri düzey Android orta ve kıdemli, mimarlar daha da önemlidir Sudaki bir balık gibi, çabuk alın!

[Android gelişmiş öğrenme videosu], [Android mülakat hilelerinin tam seti PDF], [Android geliştirme temel bilgi notları] özel mesajla [Android] ücretsiz olarak elde edilebilir!

Andrews'ın soğuk kışında iş atlama ve maaş artışı gibi gelişmiş geliştirme deneyimi paylaşılır, böylece mülakat geçiş oranı iki katına çıkar!
önceki
Android geliştiricilerinin zorlu yolculuğunu geri sayın: o yıllarda hepimizin yaptığı hatalar
Sonraki
Android Bilgi Notları: 2 "yanlış anlaşılan" Android bilgi puanını kaydedin
Görüşme sırasında hangi konulara dikkat edilmelidir? İşte programcı iş görüşmelerinin 66 detayı
Android röportajları için temel bilgi noktaları: Android'de Handler hakkında sekiz önemli sorunun bir özeti
Yıl ortasında Ali'ye tekrar katılmak için iyi bir zaman, Ali'ye katılmak istersem ne yapmalıyım?
Android programcıları: İyi bir iş bulmak ve salgın krizi kırmak için mülakata nasıl hazırlanılır?
"Bir günde röportaj için nasıl hazırlandım ve Tencent teklifini nasıl aldım?"
Muhabir: Temel java nasıl? Çok iş parçacıklı okuma mutlaka çok iş parçacıklı güvenlik sorunlarına neden olur mu?
Yılbaşı tarım ürünleri siparişleri 200 milyonu aştı, Pinduoduo markalı tarım ürünlerini şehirlere ve kırsal alanlara tanıtıyor
Didi, 62 tren istasyonunda çevrimiçi araç çağırma için özel toplama noktaları ve kanallar oluşturuyor
Marka yükseltme ve geliştirme Wanrun Group, 2020'de yeni bir sayfa açıyor
Yeni Land Rover Discovery Sport neden Discovery ailesinin spor şampiyonu oldu?
Ağır! Chengdu: İlkokul 13 Nisan'da başlıyor! Lise giriş sınavı orta derecede gecikti
To Top