2026'da Android 16: Yeni API'ler, Masaüstü Modu ve Mülakat Soruları

Android 16 (API 36) hakkında kapsamlı inceleme: masaüstü modu, ProgressStyle bildirimleri, öngörülü geri navigasyon, zorunlu kenardan kenara renderlama ve mülakat soruları.

Geliştiriciler için Android 16 masaüstü modu ve yeni API görseli

Android 16 (API seviyesi 36, kod adı "Baklava"), Android 12'nin Material You yenilemesinden bu yana platformun en etkili güncellemelerinden birini temsil etmektedir. 10 Haziran 2025'te kararlı sürüm olarak yayımlanan bu versiyon, Mart 2026 itibarıyla aktif cihazların %21'inden fazlasında çalışmakta ve en yaygın kullanılan Android sürümü konumunda bulunmaktadır. 2026 yılında mülakata hazırlanan Android geliştiricileri için bu API değişikliklerini bilmek tartışmasız bir zorunluluktur.

Mülakatlar İçin Kritik Bilgi

Android 16, API 36'yı hedefleyen uygulamalar için üç köklü değişikliği zorunlu kılmaktadır: kenardan kenara renderlama zorunludur, yön ve yeniden boyutlandırma kısıtlamaları büyük ekranlarda (600dp+) göz ardı edilmektedir ve öngörülü geri navigasyonun düzgün şekilde ele alınması gerekmektedir. 2026'daki her Android mülakatı bu konulardan en az birine değinecektir.

Android 16 SDK Yayın Modeli ve Major-Minor Stratejisi

Android 16, geliştiricilerin özellik benimseme planlamasını değiştiren çift yayın yapısı sunmaktadır. Ana SDK, Mart 2025'te Beta 3 ile birlikte gönderilmiş ve davranış değişiklikleri ile temel API'leri kilitlemişti. İkinci bir minor SDK, 2 Aralık 2025'te platform davranışını değiştirmeden yeni API'ler ekleyerek yayımlanmıştır.

Bu ayrım mülakatlarda büyük önem taşımaktadır: major yayın, uyumluluk kıran değişikliklerin bulunduğu yerdir (kenardan kenara, yön zorunluluğu), minor yayın ise mevcut uygulama davranışı üzerinde sıfır etki ile yeni yetenekler (ek Jetpack kütüphaneleri, yapay zeka ile ilgili API'ler) sağlamaktadır. Google bu modeli, API teslimini hızlandırırken kurumsal ekiplere uyumluluk için kararlı ve öngörülebilir yıllık bir hedef sunmak amacıyla tasarlamıştır.

Yaygın bir mülakat sorusu, bu çift model bağlamında targetSdkVersion ile compileSdkVersion arasındaki farkı sormaktadır. Yanıt: targetSdkVersion = 36 ayarı, major yayındaki tüm davranış değişikliklerini tetikler. Minor SDK yalnızca eklemeye dayalıdır — herhangi bir opt-in veya hedef güncelleme gerektirmez.

API 36'da Kenardan Kenara Zorunluluğu

Android 16'yı hedefleyen uygulamalar artık kenardan kenara düzenlerden vazgeçemezler. Sistem, setDecorFitsSystemWindows(true) çağrılarını ve eski SystemUI görünürlük bayraklarını göz ardı etmektedir. Her uygulamanın window insets'i doğru şekilde işlemesi gerekmektedir; aksi takdirde UI öğeleri durum çubuğu ve navigasyon çubuğunun arkasında gizlenebilir.

MainActivity.ktkotlin
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // enableEdgeToEdge() is now the default on API 36+
        // No opt-out available
        enableEdgeToEdge()
        setContent {
            Scaffold(
                modifier = Modifier.fillMaxSize()
            ) { innerPadding ->
                // innerPadding accounts for system bars
                MainContent(
                    modifier = Modifier.padding(innerPadding)
                )
            }
        }
    }
}

Jetpack Compose içindeki Scaffold bileşeni, insets'i innerPadding aracılığıyla otomatik olarak yönetmektedir. View tabanlı uygulamalarda ViewCompat.setOnApplyWindowInsetsListener önerilen yaklaşım olmaya devam etmektedir. Kritik detay şudur: WindowInsetsCompat.Type.systemBars() açıkça tüketilmelidir, aksi halde sistem uygulama tasarımıyla uyuşmayabilecek varsayılan bir padding uygulayacaktır.

Mülakatçılar sıklıkla XML düzenlerinde android:fitsSystemWindows="true" özelliğine dayanan uygulamalara ne olduğunu sormaktadır. API 36'da bu özellik hâlâ çalışmaktadır ancak yalnızca sistem çubukları için padding uygulamaktadır — artık uygulamanın kenardan kenara çizim yapmasını engellemez.

Adaptif Uygulamalar ve Büyük Ekran Yön Değişiklikleri

Android 16, smallestWidth >= 600dp olan ekranlarda oyun dışı uygulamalar için android:screenOrientation ve android:resizeableActivity="false" özelliklerini göz ardı etmektedir. Tabletler, katlanabilir cihazlar ve masaüstü modu aracılığıyla bağlanan harici monitörler bu kapsamdadır. Bu değişiklik, büyük ekranlarda yıllardır süren letterbox formatındaki telefon düzenlerine son vermektedir.

kotlin
// Responsive layout using WindowSizeClass
@Composable
fun AdaptiveLayout() {
    val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
    when {
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.EXPANDED -> {
            // Two-pane layout for tablets/desktop
            TwoPaneLayout()
        }
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.MEDIUM -> {
            // Adapted layout for foldables
            MediumLayout()
        }
        else -> {
            // Phone layout
            CompactLayout()
        }
    }
}

Jetpack WindowManager kütüphanesi, duyarlı tasarım için WindowSizeClass sağlamaktadır. Özellikle API 36'yı hedefleyen uygulamalar için bir opt-out özelliği mevcuttu, ancak Android 17 (2026 Q2'de beklenen) bu opt-out'u tamamen kaldırmaktadır.

Mülakatçılar genellikle bunu şöyle çerçevelemektedir: "Dikey yöne kilitlenmiş bir uygulamayı büyük ekranları destekleyecek şekilde nasıl taşırsınız?" Yanıt, sabit yönün duyarlı düzenlerle değiştirilmesini, yapılandırma değişikliklerinin test edilmesini (özellikle onConfigurationChanged) ve kaydedilmiş durumun ekran boyutu geçişlerinde hayatta kalmasının doğrulanmasını kapsamaktadır.

Masaüstü Modu ve Bağlı Ekranlar

Masaüstü modu, Android 16 QPR3'te (Mart 2026 Pixel Drop) genel kullanıma sunulan bir özellik olarak yayımlanmıştır ve Pixel 8+ ile Samsung Galaxy S26/Fold7/Flip7 cihazlarını desteklemektedir. Bir telefonun USB-C aracılığıyla harici monitöre bağlanması, görev çubuğu, yeniden boyutlandırılabilir pencereler, birden fazla sanal masaüstü ve tam klavye/fare desteği içeren bağımsız bir masaüstü oturumu başlatmaktadır.

LaunchOnExternalDisplay.ktkotlin
fun launchOnExternalDisplay(context: Context) {
    val displayManager = context.getSystemService(
        Context.DISPLAY_SERVICE
    ) as DisplayManager
    // Find external displays
    val externalDisplays = displayManager.displays.filter {
        it.displayId != Display.DEFAULT_DISPLAY
    }
    if (externalDisplays.isNotEmpty()) {
        val options = ActivityOptions.makeBasic().apply {
            launchDisplayId = externalDisplays.first().displayId
        }
        context.startActivity(
            Intent(context, DesktopActivity::class.java),
            options.toBundle()
        )
    }
}

Telefon ve harici ekran bağımsız çalışmaktadır — uygulamalar çalıştıkları ekrana özgüdür. Google ve Samsung, ekosistem genelinde parçalanmayı azaltmak için masaüstü pencere deneyimi üzerinde iş birliği yapmıştır. Samsung DeX aynı platform API'lerini entegre ederek birleşik bir geliştirici hedefi oluşturmaktadır.

Masaüstü modu için temel geliştirici değerlendirmeleri:

  • Pencere metrikleri dinamik olarak değişmektedir. Display nesneleri asla önbelleğe alınmamalıdır. Her yapılandırma değişikliğinde WindowMetricsCalculator veya Compose LocalConfiguration sorgulanmalıdır.
  • Klavye ve fare desteği. Masaüstü oturumlarında harici çevre birimleri standarttır. KeyEvent dağıtımı ve işaretçi hover durumları ele alınmalıdır.
  • Çoklu örnek desteği. Masaüstü kullanıcıları aynı uygulamanın birden fazla penceresini beklemektedir. android:documentLaunchMode="intoExisting" bildirimi yapılmalı veya FLAG_ACTIVITY_NEW_DOCUMENT uygun şekilde ele alınmalıdır.

Android mülakatlarında başarılı olmaya hazır mısın?

İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.

ProgressStyle Bildirimleri ve Canlı Güncellemeler

Android 16, yolculuk paylaşımı takibi, teslimat güncellemeleri ve navigasyon gibi ilerleme odaklı kullanıcı deneyimleri için yeni bir bildirim şablonu olan Notification.ProgressStyle'ı tanıtmaktadır. Bu, geçici özel bildirim düzenlerini standartlaştırılmış ve sistem tarafından öne çıkarılan bir formatla değiştirmektedir.

DeliveryNotificationHelper.ktkotlin
fun buildDeliveryNotification(
    context: Context,
    orderId: String,
    progress: Float,  // 0.0 to 1.0
    currentStep: String
): Notification {
    val style = Notification.ProgressStyle()
        .setStyledByProgress(true)
        .setProgress(progress)
        .setProgressTrackerIcon(
            Icon.createWithResource(context, R.drawable.ic_delivery_truck)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_preparing)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_in_transit)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.34f)
                .setColor(context, R.color.segment_delivered)
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.0f)
                .setLabel("Order placed")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.33f)
                .setLabel("Preparing")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.66f)
                .setLabel("In transit")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(1.0f)
                .setLabel("Delivered")
        )

    return Notification.Builder(context, DELIVERY_CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle("Order #$orderId")
        .setContentText(currentStep)
        .setStyle(style)
        .setOngoing(true)
        .build()
}

ProgressStyle, segmentleri (ilerleme çubuğunun renkli bölümleri), noktaları (etiketlenmiş kilometre taşları) ve çubuk boyunca hareket eden bir izleme simgesini desteklemektedir. setStyledByProgress(true) ayarı, sistemin segmentleri tamamlanma durumuna göre renklendirmesini sağlamaktadır. Android bildirim mülakat hazırlığı kapsamında, ProgressStyle'ın standart setProgress() yerine ne zaman kullanılacağını bilmek kritik önem taşımaktadır: ProgressStyle, belirgin kilometre taşlarına sahip çok adımlı süreçler içindir; setProgress() ise dosya indirme gibi tek işlemli operasyonlar için uygun olmaya devam etmektedir.

OnBackInvokedCallback ile Öngörülü Geri Navigasyon

Android 16, onBackPressed() API'sinden OnBackInvokedCallback API'sine çok yıllık geçişi tamamlamaktadır. Sistem artık geri hareketi sırasında hedef ekranın "gözetleme" animasyonunu göstererek kullanıcıların onaylama veya iptal etme olanağı sunmaktadır. Bir callback kaydetmeden onBackPressed() yöntemini geçersiz kılmaya devam eden uygulamalar bu animasyonu bozmaktadır.

DetailActivity.ktkotlin
class DetailActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (Build.VERSION.SDK_INT >= 36) {
            onBackInvokedDispatcher.registerOnBackInvokedCallback(
                OnBackInvokedDispatcher
                    .PRIORITY_SYSTEM_NAVIGATION_OBSERVER
            ) {
                // Observe back navigation without intercepting
                // Log analytics or trigger save-draft logic
                analyticsTracker.logBackNavigation(
                    screen = "detail"
                )
            }
        }
    }
}

Yeni PRIORITY_SYSTEM_NAVIGATION_OBSERVER önceliği, uygulamaların sistem animasyonunu engellemeden geri olaylarını gözlemlemesine olanak tanımaktadır. Android 16 ayrıca öngörülü animasyonla entegre olan özel geri yığın davranışları için finishAndRemoveTaskCallback ve moveTaskToBackCallback eklentilerini sunmaktadır.

Öngörülü geri, Android 16'da 3 düğmeli navigasyonda da çalışmaktadır: geri düğmesine uzun basma, önizleme animasyonunu başlatmaktadır. Bu, sık sorulan bir mülakat konusudur — yalnızca hareket navigasyonundan bahseden adaylar konunun yarısını atlamaktadır.

Bildirim Soğutma ve Zorunlu Gruplandırma

İki ek bildirim değişikliği her Android uygulamasını etkilemektedir. Bildirim soğutma mekanizması, aynı uygulamadan hızla gelen bildirimler için uyarı sesini yaklaşık 60 saniye boyunca kademeli olarak azaltarak sıfırlamadan önce düşürmektedir. Varsayılan olarak etkindir ve geliştiriciler tarafından geçersiz kılınamaz.

Zorunlu bildirim gruplandırma, uygulamanın setGroup() kullanıp kullanmadığına bakılmaksızın sistemin bildirimleri otomatik olarak gruplandırdığı anlamına gelmektedir. Bireysel bildirim belirginliğine kullanıcı etkileşimi için güvenen uygulamaların bildirim stratejilerini yeniden düşünmeleri gerekebilir.

Mülakat hazırlığında bu değişiklikler, Kotlin coroutine'leri ve Flow hakkındaki sorularla iyi eşleşmektedir çünkü bildirimlerin verimli şekilde gruplandırılması ve kısıtlanması genellikle coroutine tabanlı debouncing kalıpları gerektirmektedir.

Health Connect FHIR API'leri ve RangingManager

Android 16, Health Connect'i FHIR (Fast Healthcare Interoperability Resources) yazma desteğiyle genişleterek sağlık uygulamalarının yapılandırılmış tıbbi kayıtlar oluşturmasını ve saklamasını mümkün kılmaktadır. RangingManager API'si, BLE kanal algılama, BLE RSSI, Ultra-Geniş Bant ve Wi-Fi RTT genelinde mesafe/açı ölçümünü birleştirerek daha önce dört ayrı API yüzeyi gerektiren işlevleri konsolide etmektedir.

Fotoğraf seçici, aynı korumalı alan güvenlik modelini korurken geliştiricilerin seçicinin görünümünü kontrol etmesine olanak tanıyan daha derin özelleştirme API'leri kazanmaktadır. Bulut medya sağlayıcı araması, Developer Preview 2'de eklenmiştir.

Bu API'ler genel Android mülakatlarında daha az karşılaşılmaktadır ancak sağlık teknolojisi, IoT veya medya yoğun uygulamalardaki alan bazlı pozisyonlar için kritik öneme sahiptir.

Android 16 Mülakat Soruları ve Yanıtları

Aşağıda, yukarıda ele alınan davranış ve API değişikliklerine dayanan, 2026 Android geliştirici mülakatlarında en sık karşılaşılması beklenen sorular yer almaktadır.

S: API 36'yı hedeflerken zorunlu davranış değişiklikleri nelerdir? Üç değişiklik zorunlu tutulmaktadır: kenardan kenara renderlama (vazgeçme yok), >= 600dp ekranlarda yön/yeniden boyutlandırma kısıtlamalarının göz ardı edilmesi ve öngörülü geri navigasyonun sistem genelinde etkinleştirilmesi. Uygulamaların WindowInsets'i doğru şekilde işlemesi, duyarlı düzenleri desteklemesi ve onBackPressed() yerine OnBackInvokedCallback'e geçiş yapması gerekmektedir.

S: Masaüstü modu uygulama mimarisini nasıl etkiler? Masaüstü modu bağımsız bir ekran oturumu oluşturur. Uygulamaların Display nesnelerini önbelleğe almaktan kaçınması, dinamik pencere metriklerini desteklemesi, klavye/fare girişini işlemesi ve çoklu örnek senaryolarını göz önünde bulundurması gerekmektedir. ActivityOptions.launchDisplayId API'si belirli ekranların programatik olarak hedeflenmesine olanak tanımaktadır.

S: ProgressStyle, setProgress()'ın yerini ne zaman almalıdır? ProgressStyle, belirgin kilometre taşlarına sahip çok adımlı kullanıcı süreçleri (yolculuk paylaşımı, teslimat, navigasyon) içindir. Standart setProgress(), tek operasyon ilerlemesi (dosya indirme, yükleme) için uygun olmaya devam etmektedir. ProgressStyle, bildirim panelinde öne çıkarılmış görünürlük kazanmaktadır.

S: Android 16 major/minor SDK yayın modeli nedir? Major yayın (Mart 2025) davranış değişikliklerini içerir ve targetSdkVersion güncelleme gerektirmektedir. Minor yayın (Aralık 2025) davranış değişiklikleri olmadan yeni API'ler ekler — targetSdkVersion güncellemesine gerek yoktur. Bu model kararlılığı inovasyondan ayırmaktadır.

S: Öngörülü geri, 3 düğmeli navigasyonla nasıl çalışır? API 36+ üzerinde, 3 düğmeli navigasyonda geri düğmesine uzun basma, hareket navigasyonu ile aynı öngörülü animasyonu tetiklemektedir. Uygulamaların uygun öncelikle OnBackInvokedCallback kaydetmesi gerekmektedir. PRIORITY_SYSTEM_NAVIGATION_OBSERVER önceliği, engelleme olmadan gözlem yapılmasına olanak tanımaktadır.

Pratik yapmaya başla!

Mülakat simülatörleri ve teknik testlerle bilgini test et.

Sonuç

  • Kenardan kenara renderlama artık API 36'da isteğe bağlı değildir. Tüm ekranlar, özellikle özel araç çubukları ve bottom sheet'ler için doğru WindowInsets işleme açısından denetlenmelidir.
  • Sabit yön manifest'leri, Android 17 vazgeçme seçeneğini kaldırmadan önce WindowSizeClass kullanan Jetpack Compose duyarlı düzenlerle değiştirilmelidir.
  • Masaüstü modu Pixel 8+ ve Samsung amiral gemisi cihazlarda üretime hazırdır. Uygulamalar harici ekranlar, klavye girişi ve çoklu örnek senaryolarıyla test edilmelidir.
  • onBackPressed() yerine OnBackInvokedCallback'e geçiş yapılmalıdır. Sistem animasyonlarını engellemeden analitik takibi için PRIORITY_SYSTEM_NAVIGATION_OBSERVER kullanılmalıdır.
  • Her çok adımlı kullanıcı süreci için Notification.ProgressStyle benimsenmelidir. Bildirim soğutma ve zorunlu gruplandırma, hedef SDK'dan bağımsız olarak tüm uygulamaları etkilemektedir.
  • Major/minor SDK modeli, davranış değişikliklerinin yılda bir kez gelmesi anlamına gelmektedir. Minor SDK, uyumluluk riski olmadan yeni API'ler getirmektedir — serbestçe benimsenebilir.

Pratik yapmaya başla!

Mülakat simülatörleri ve teknik testlerle bilgini test et.

Etiketler

#android
#android-16
#kotlin
#desktop-mode
#interview

Paylaş

İlgili makaleler