Bir Android Uygulama Projesi oluşturdum ve MainActivity.java'da> onCreate()
arıyor super.onCreate(savedInstanceState)
.
Yeni başlayan biri olarak, yukarıdaki satırın amacının ne olduğunu kimse açıklayabilir mi?
Yanıtlar:
Yaptığınız her Aktivite, bir dizi yöntem çağrısı ile başlatılır. onCreate()
bu aramaların ilkidir.
Etkinliklerinizin her biri android.app.Activity
ya doğrudan ya da başka bir alt sınıfını alt sınıflayarak genişler Activity
.
Java'da, bir sınıftan miras aldığınızda, içinde kendi kodunuzu çalıştırmak için onun yöntemlerini geçersiz kılabilirsiniz. Bunun çok yaygın bir örneği, toString()
genişletme sırasında yöntemin geçersiz kılınmasıdır java.lang.Object
.
Bir yöntemi geçersiz kıldığımızda, sınıfımızdaki yöntemi tamamen değiştirme veya mevcut üst sınıf 'yöntemini genişletme seçeneğimiz vardır. Çağrı olarak super.onCreate(savedInstanceState);
, kodunuzu çalıştırmak için Dalvik VM anlatmak ek olarak ebeveyn sınıfının onCreate () mevcut koda. Bu satırı dışarıda bırakırsanız, yalnızca kodunuz çalıştırılır. Mevcut kod tamamen yok sayılır.
Ancak, bu süper çağrıyı yönteminize dahil etmelisiniz, çünkü yapmazsanız onCreate()
kod Activity
asla çalıştırılmaz ve uygulamanız Aktiviteye herhangi bir Bağlam atanmamış gibi her türlü problemle karşılaşır (yine de bir SuperNotCalledException
bağlamınız olmadığını anlama şansınız olmadan önce).
Kısacası, Android'in kendi sınıfları inanılmaz derecede karmaşık olabilir. Çerçeve sınıflarındaki kod, kullanıcı arayüzü çizimi, ev temizliği ve Aktivite ve uygulama yaşam döngülerinin bakımı gibi şeyleri işler. super
Çağrılar, geliştiricilerin bu karmaşık kodu arka planda çalıştırmalarına olanak tanırken kendi uygulamalarımız için iyi bir soyutlama düzeyi sağlamaya devam ediyor.
* Türetilmiş sınıf onCreate(bundle)
yöntemi, bu yöntemin üst sınıf uygulamasını çağırmalıdır. " Super " anahtar sözcüğü kullanılmazsa, SuperNotCalledException bir istisna oluşturur .
Kalıtım için Java
, üst sınıf yöntemini geçersiz kılmak ve ayrıca yukarıdaki sınıf yöntemini çalıştırmak için super.methodname()
, geçersiz kılma türetilmiş sınıf yöntemini kullanın;
Android sınıfı da aynı şekilde çalışır. Anlamlı kodun yazıldığı yönteme Activity
sahip sınıfı genişleterek ve onCreate(Bundle bundle)
bu kodu tanımlanan etkinlikte yürütmek için, onCreate () gibi yöntemle super anahtar sözcüğünü kullanın super.onCreate(bundle)
.
Bu, Activity sınıfı onCreate()
yönteminde yazılan bir koddur ve Android Dev ekibi daha sonra bu yönteme daha anlamlı kodlar ekleyebilir. Yani, eklemeleri yansıtmak için sınıfınızdaki super.onCreate () ' i çağırmanız gerekir Activity
.
protected void onCreate(Bundle savedInstanceState) {
mVisibleFromClient = mWindow.getWindowStyle().getBoolean(
com.android.internal.R.styleable.Window_windowNoDisplay, true);
mCalled = true;
}
boolean mVisibleFromClient = true;
/**
* Controls whether this activity main window is visible. This is intended
* only for the special case of an activity that is not going to show a
* UI itself, but can't just finish prior to onResume() because it needs
* to wait for a service binding or such. Setting this to false prevents the UI from being shown during that time.
*
* <p>The default value for this is taken from the
* {@link android.R.attr#windowNoDisplay} attribute of the activity's theme.
*/
Aynı zamanda , Aktivitenizde mCalled
çağırdığınız anlamına gelen değişkeni de korur super.onCreate(savedBundleInstance)
.
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
Kaynak koduna buradan bakın.
Çünkü super.onCreate () üzerine, SavedInstanceState'i yüklemek için Activity (herhangi bir aktivitenin üst sınıfı) sınıfına ulaşacaktır ve normalde kaydedilmiş herhangi bir örnek durumu ayarlamıyoruz, ancak android çerçevesi öyle bir şekilde yaptı ki, çağırmalıyız bu.
super.onCreate(savedInstanceState)
Başka bir
Etkinlik bazı örtük nedenlerle (örneğin, kullanıcı geri düğmesine basmadığı için) yok edilirse ve yeniden başlatılırsa, onCreate () aracılığıyla uygulamanıza döndürülmesini istediğiniz bilgilerdir. OnSaveInstanceState () öğesinin en yaygın kullanımı, varsayılan olarak, kullanıcı G1 klavyesini kaydırdığında etkinlikler yok edilip yeniden oluşturulduğu için ekran dönüşlerini işlemektir.
Super.onCreate (SavedInstanceState) 'i çağırmanın nedeni, kodunuzun başka türlü derlenmemesidir. ;-)