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 - TextViewburada 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
TextViewnesne yaratırsınız t!
- Daha sonra
TextViewdeğ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
onCreateyö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 Runnableve 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 Activityyaş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.