Kişisel onCreate()
yöntem birçok büyük kusuru vardır:
1) Etkinliğinizi onCreate
hazırlar - böylece burada yaptığınız hiçbir şey, bu yöntem bitene kadar kullanıcı tarafından görülebilir hale getirilmez! Örneğin - TextView
burada bir metnini asla BİR defadan fazla değiştiremezsiniz, çünkü yalnızca son değişiklik çizilir ve böylece kullanıcı tarafından görülebilir!
2) Bir Android programının varsayılan olarak yalnızca BİR iş parçacığında çalışacağını unutmayın ! Böylece: asla kullanmayın Thread.sleep()
veya Thread.wait()
ana iş parçacığı içinde UI sorumlu olan! ( Daha fazla bilgi için "Uygulamanızı Duyarlı Tutun" bölümünü okuyun !)
Ne başlatma sizin Faaliyet yapmasıdır:
- sebepsiz yere yeni bir
TextView
nesne yaratırsınız t
!
- Daha sonra
TextView
değişkendeki düzeninizi seçersiniz t
.
- metnini ayarlarsınız
t
(ancak unutmayın: yalnızca tamamlandıktan ve uygulamanızın ana olay döngüsü çalıştıktan sonra görüntülenecektir onCreate()
!)
- Eğer beklemek 10 saniye sizin içinde
onCreate
yöntemiyle - Bu yapılması asla tüm UI aktivitesini durdurur ve kesinlikle bir ANR zorlar olarak (yukarıdaki bağlantıya bakın, Uygulama Yanıt Vermiyor!)
- sonra başka bir metin belirlersiniz - bu,
onCreate()
yönteminiz biter bitmez görüntülenecektir ve diğer birkaç Etkinlik yaşam döngüsü yöntemi işlenir!
Çözüm:
Metni yalnızca bir kez ayarlayın onCreate()
- bu, görünür olması gereken ilk metin olmalıdır.
Bir Runnable
ve bir oluşturHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
bu çalıştırılabilirliği bir işleyici olarak kurun, mümkün onCreate()
(ancak aşağıdaki tavsiyemi okuyun):
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Tavsiye: Bir Activity
yaşam döngüsünü bildiğinizden emin olun ! Böyle şeyler yaparsanız, onCreate()
bu sadece sizin ilkActivity
yaratıldığında gerçekleşir ! Android, görünür olmasa bile muhtemelen sizi daha uzun süre hayatta tutacaktır ! Bir kullanıcı onu tekrar "başlattığında" - ve hala mevcutsa - artık ilk metninizi görmeyeceksiniz!Activity
=> İşleyicileri her zaman içine kurun onResume()
ve onları devre dışı bırakın onPause()
! Aksi takdirde Activity
, hiç görünmediğinizde "güncellemeler" alacaksınız ! Sizin durumunuzda, yeniden etkinleştirildiğinde ilk metninizi tekrar görmek istiyorsanız, onu ayarlamalısınız onResume()
, değil onCreate()
!
.setText()
, tüm "parçacığı" ayarlamasını söylediğiniz metinle değiştirmesidir; Zaten oraya koyduğunuz metin DAHİL.