Etkinliklere giriş

Activity sınıfı Android uygulamasının önemli bir bileşenidir ve etkinliklerin başlatılma ve bir araya getirilme şekli platformun uygulama modelinin temel bir parçasıdır. Uygulamaların main() yöntemiyle başlatıldığı programlama paradigmalarının aksine Android sistemi, Activity örneğinde kod başlatırken yaşam döngüsünün belirli aşamalarına karşılık gelen belirli geri çağırma yöntemlerini çağırır.

Bu belgede, etkinlik kavramı tanıtılmış ve ardından bunları nasıl kullanabileceğiniz konusunda bazı genel bilgiler verilmiştir. Uygulamanızın tasarımıyla ilgili en iyi uygulamalar hakkında daha fazla bilgi için Uygulama Mimarisi Rehberi'ne bakın.

Etkinlik kavramı

Mobil uygulama deneyimini masaüstünden farklı kılan, kullanıcının uygulama ile etkileşiminin her zaman aynı yerden başlamamasıdır. Bunun yerine, kullanıcı yolculuğu genellikle belirsiz bir şekilde başlıyor. Örneğin, ana ekranınızdan bir e-posta uygulaması açarsanız e-posta listeleri görebilirsiniz. Buna karşılık, e-posta uygulamanızı başlatan bir sosyal medya uygulaması kullanıyorsanız e-posta oluşturmak için doğrudan e-posta uygulamasının ekranına gidebilirsiniz.

Activity sınıfı, bu paradigmayı kolaylaştırmak için tasarlanmıştır. Bir uygulama başka bir uygulama çağırdığında, çağrı yapan uygulama atomik bütün olarak uygulama yerine diğer uygulamada bir etkinlik çağırır. Bu şekilde etkinlik, bir uygulamanın kullanıcıyla etkileşimi için giriş noktası işlevi görür. Bir etkinliği Activity sınıfının alt sınıfı olarak uygularsınız.

Bir etkinlik, uygulamanın kullanıcı arayüzünü çizdiği pencereyi sağlar. Bu pencere genellikle ekranı kaplar, ancak ekrandan daha küçük olabilir ve diğer pencerelerin üzerinde kayabilir. Genellikle, bir etkinlik bir uygulamada tek bir ekran kullanır. Örneğin, bir uygulamanın etkinliklerinden biri için bir Tercihler ekranı, diğeri ise bir Fotoğraf Seç ekranı uygulayabilir.

Çoğu uygulama birden fazla ekran içerir, yani birden fazla etkinlikten oluşur. Genellikle, bir uygulamadaki bir etkinlik ana etkinlik olarak belirtilir. Bu, kullanıcı uygulamayı başlattığında görünen ilk ekrandır. Daha sonra her etkinlik, farklı işlemler gerçekleştirmek için başka bir etkinlik başlatabilir. Örneğin, basit bir e-posta uygulamasındaki ana etkinlik, e-posta gelen kutusunu gösteren bir ekran sağlayabilir. Bundan sonra ana etkinlik, e-posta yazma ve tek tek e-postaları açma gibi görevler için ekranlar sağlayan başka faaliyetler başlatmaya başlayabilir.

Etkinlikler, uygulamada tutarlı bir kullanıcı deneyimi oluşturmak için birlikte çalışsa da her etkinlik yalnızca diğer etkinliklere bağlıdır; uygulamadaki etkinlikler arasında genellikle minimum düzeyde bağımlılık vardır. Hatta etkinlikler genellikle diğer uygulamalara ait etkinlikleri başlatır. Örneğin, bir tarayıcı uygulaması, bir sosyal medya uygulamasının Paylaşım etkinliğini başlatabilir.

Uygulamanızda etkinlikleri kullanmak için bunlarla ilgili bilgileri uygulamanın manifest dosyasına kaydetmeniz ve etkinlik yaşam döngülerini uygun şekilde yönetmeniz gerekir. Bu belgenin geri kalanında bu konular açıklanmaktadır.

Manifest'i yapılandırma

Uygulamanızın etkinlikleri kullanabilmesi için manifest dosyasında etkinlikleri ve özelliklerinden bazılarını beyan etmeniz gerekir.

Etkinlikleri bildir

Etkinliğinizi bildirmek için manifest dosyanızı açın ve <application> öğesinin alt öğesi olarak bir <activity> öğesi ekleyin. Örneğin:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

Bu öğe için gereken tek özellik, etkinliğin sınıf adını belirten android:name özelliğidir. Etiket, simge veya kullanıcı arayüzü teması gibi etkinlik özelliklerini tanımlayan özellikler de ekleyebilirsiniz. Bunlar ve diğer özellikler hakkında daha fazla bilgi için <activity> öğesi referans belgelerine bakın.

Not: Uygulamanızı yayınladıktan sonra etkinlik adlarını değiştirmemelisiniz. Bunu yaparsanız uygulama kısayolları gibi bazı işlevleri bozabilirsiniz. Yayınlandıktan sonra kaçınılması gereken değişiklikler hakkında daha fazla bilgi için Değiştirilemeyecek Şeyler sayfasını inceleyin.

Amaç filtrelerini bildirme

Amaç filtreleri, Android platformunun çok güçlü bir özelliğidir. Yalnızca açık bir isteğe değil aynı zamanda örtülü bir isteğe göre de etkinlik başlatma imkanı sağlarlar. Örneğin, açık bir istek, sisteme "Gmail uygulamasında E-posta Gönderme etkinliğini başlatmasını" söyleyebilir. Öte yandan, örtülü istek, sisteme "İşi yapabilen tüm etkinliklerde E-posta Gönder ekranı başlatmasını" söyler. Sistem kullanıcı arayüzü, kullanıcıya bir görevi gerçekleştirirken hangi uygulamayı kullanması gerektiğini sorduğunda bu, çalışan bir intent filtresidir.

<activity> öğesinde bir <intent-filter> özelliği tanımlayarak bu özellikten yararlanabilirsiniz. Bu öğenin tanımı, bir <action> öğesini ve isteğe bağlı olarak bir <category> öğesi ve/veya <data> öğesini içerir. Bu öğeler, etkinliğinizin yanıt verebileceği amaç türünü belirtmek için birleştirilir. Örneğin, aşağıdaki kod snippet'i metin verileri gönderen ve diğer etkinliklerden istek alan bir etkinliğin nasıl yapılandırılacağını gösterir:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

Bu örnekte <action> öğesi bu etkinliğin veri gönderdiğini belirtir. <category> öğesinin DEFAULT olarak belirtilmesi, etkinliğin başlatma isteklerini almasını sağlar. <data> öğesi, bu etkinliğin gönderebileceği veri türünü belirtir. Aşağıdaki kod snippet'i, yukarıda açıklanan etkinliğin nasıl çağrılacağını gösterir:

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Java

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
Uygulamanızın bağımsız olmasını amaçlıyor ve diğer uygulamaların etkinliklerini etkinleştirmesine izin vermiyorsanız başka bir intent filtresine ihtiyacınız yoktur. Diğer uygulamaların kullanımına sunmak istemediğiniz etkinliklerde intent filtresi bulunmamalıdır. Bu etkinlikleri, açık intent'leri kullanarak kendiniz başlatabilirsiniz. Etkinliklerinizin amaçlara nasıl yanıt verebileceği hakkında daha fazla bilgi için Niyetler ve Amaç Filtreleri bölümüne bakın.

İzinleri beyan et

Belirli bir etkinliği hangi uygulamaların başlatabileceğini kontrol etmek için manifestin <activity> etiketini kullanabilirsiniz. Bir üst etkinlik, manifestlerinde aynı izinlere sahip değilse bir alt etkinliği başlatamaz. Bir üst etkinlik için <uses-permission> öğesi tanımlarsanız her alt etkinlik için eşleşen bir <uses-permission> öğesi olmalıdır.

Örneğin, uygulamanız sosyal medyada bir yayın paylaşmak için SocialApp adlı bir uygulama kullanmak istiyorsa SocialApp; uygulamayı çağıran bir uygulamanın sahip olması gereken izni tanımlamalıdır:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

Bunun ardından, SocialApp'i çağırmasına izin verilmesi için uygulamanızın SocialApp'in manifest dosyasında ayarlanan izinle eşleşmesi gerekir:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

İzinler ve genel olarak güvenlik hakkında daha fazla bilgi edinmek için Güvenlik ve İzinler sayfasını inceleyin.

Etkinlik yaşam döngüsünü yönetme

Bir etkinlik, kullanım ömrü boyunca çeşitli durumlardan geçer. Eyaletler arasındaki geçişleri işlemek için bir dizi geri çağırma kullanırsınız. Bu geri çağırma işlevleri aşağıdaki bölümlerde açıklanmıştır.

onCreate()

Sistem, etkinliğinizi oluşturduğunda tetiklenen bu geri çağırmayı uygulamanız gerekir. Uygulamanız, etkinliğinizin temel bileşenlerini başlatmalıdır: Örneğin, uygulamanız görünümler oluşturmalı ve verileri buradaki listelere bağlamalıdır. En önemlisi, etkinliğin kullanıcı arayüzünün düzenini tanımlamak için setContentView() özelliğini çağırmanız gereken yer burasıdır.

onCreate() bittiğinde bir sonraki geri arama her zaman onStart() olur.

onStart()

onCreate() çıkarken etkinlik, Başlatıldı durumuna girer ve kullanıcı tarafından görülebilir hale gelir. Bu geri çağırma, etkinliğin ön plana geçme ve etkileşimli hale gelme için gereken son hazırlıklarını içerir.

onContinue()

Sistem, bu geri çağırmayı etkinlik kullanıcıyla etkileşimde bulunmaya başlamadan hemen önce çağırır. Bu noktada etkinlik, etkinlik yığınının en üstünde yer alır ve tüm kullanıcı girişlerini yakalar. Bir uygulamanın temel işlevinin çoğu onResume() yöntemi kullanılarak uygulanır.

onPause() geri çağırması her zaman onResume() sonucunu izler.

onPause()

Etkinlik, odağı kaybettiğinde ve Duraklatılmış duruma geçtiğinde sistem onPause() çağırır. Bu durum, örneğin kullanıcı Geri veya Son Kullanılanlar düğmesine dokunduğunda gerçekleşir. Sistem, etkinliğiniz için onPause() çağrısı yaptığında bu durum teknik olarak etkinliğinizin kısmen görünür olduğu anlamına gelir, ancak çoğu zaman kullanıcının etkinlikten ayrıldığının ve etkinliğin kısa süre içinde Durduruldu veya Devam Ettirildi durumuna geçeceğinin bir göstergesidir.

Kullanıcı, kullanıcı arayüzünün güncellenmesini bekliyorsa Duraklatılmış durumdaki etkinlikler, kullanıcı arayüzünü güncellemeye devam edebilir. Bu tür bir etkinliğe örnek olarak navigasyon haritası ekranını gösteren veya oyun oynayan bir medya oynatıcı verilebilir. Bu tür etkinliklerin odağı kaybolsa bile kullanıcı, kullanıcı arayüzünün güncellenmeye devam etmesini bekler.

Uygulama veya kullanıcı verilerini kaydetmek, ağ çağrıları yapmak ya da veritabanı işlemlerini yürütmek için onPause() uygulamasını kullanmamalısınız. Veri kaydetme hakkında bilgi için Etkinlik durumunu kaydetme ve geri yükleme bölümüne bakın.

onPause() yürütmeyi bitirdikten sonra, bir sonraki geri çağırma, etkinlik Duraklatıldı durumuna girdikten sonra ne olduğuna bağlı olarak onStop() veya onResume() olur.

onStop()

Etkinlik artık kullanıcı tarafından görülemediğinde sistem onStop() öğesini çağırır. Bunun nedeni, etkinliğin kaldırılması, yeni bir etkinliğin başlaması veya mevcut bir etkinliğin Devam ettirildi durumuna geçmesi ve durdurulan etkinliği kapsaması olabilir. Bu durumların hepsinde, durdurulan etkinlik artık hiç görünmez.

Sistemin çağıracağı sonraki geri çağırma, etkinlik kullanıcıyla etkileşimde bulunmak için geri geliyorsa onRestart() veya bu etkinlik tamamen sona eriyorsa onDestroy().

onYeniden Başlat()

Durdurulmuş durumdaki bir etkinlik yeniden başlamak üzereyken, sistem bu geri çağırmayı çağırır. onRestart(), durdurulduğu andan itibaren etkinliğin durumunu geri yükler.

Bu geri çağırmanın ardından her zaman onStart() gelir.

onDestroy()

Bir etkinlik silinmeden önce sistem bu geri çağırmayı çağırır.

Bu geri çağırma, etkinliğin aldığı son geri aramadır. onDestroy(), genellikle bir etkinlik veya etkinliği içeren süreç yok edildiğinde tüm etkinlik kaynaklarının serbest bırakılmasını sağlamak için uygulanır.

Bu bölümde bu konu yalnızca giriş niteliğindedir. Etkinlik yaşam döngüsü ve geri çağırmalarıyla ilgili daha ayrıntılı bir değerlendirme için Etkinlik Yaşam Döngüsü bölümüne bakın.