आपकी onCreate()विधि में कई भारी दोष हैं:
1) onCreate तैयार करता है तो कुछ भी नहीं है कि आप यहाँ कर बनाया जाएगा - अपने गतिविधि दिखाई दे जब तक इस पद्धति खत्म उपयोगकर्ता के लिए! उदाहरण के लिए - तुम कभी नहीं एक परिवर्तन करने के लिए सक्षम हो जाएगा TextViewके पाठ यहाँ की तुलना में अधिक एक ही अंतिम परिवर्तन के रूप में समय तैयार किया जाएगा और इस प्रकार उपयोगकर्ता को दिखाई!
2) ध्यान रखें कि एक एंड्रॉइड प्रोग्राम डिफ़ॉल्ट रूप से - केवल एक धागे में चलेगा ! इस प्रकार: कभी भी Thread.sleep()या Thread.wait()अपने मुख्य धागे में उपयोग न करें जो आपके यूआई के लिए जिम्मेदार है! ( आगे की जानकारी के लिए "अपने ऐप को उत्तरदायी रखें" पढ़ें !)
आपकी गतिविधि का आपका आरंभ क्या है:
- बिना किसी कारण के आप एक नई
TextViewवस्तु बनाते हैं t!
- आप बाद
TextViewमें चर में अपने लेआउट को चुनें t।
- आप का पाठ सेट करते हैं
t(लेकिन ध्यान रखें: यह केवल फिनिश के बाद ही प्रदर्शित होगा onCreate()और आपके एप्लिकेशन का मुख्य ईवेंट लूप!)
- आप अपनी विधि के भीतर 10 सेकंड के लिए प्रतीक्षा करें
onCreate- यह कभी भी नहीं किया जाना चाहिए क्योंकि यह सभी UI गतिविधि को रोकता है और निश्चित रूप से एक ANR को लागू करेगा (आवेदन प्रतिक्रिया नहीं, ऊपर लिंक देखें!)
- फिर आप एक और पाठ सेट करते हैं - जैसे ही आपकी
onCreate()विधि समाप्त होती है यह प्रदर्शित हो जाएगा और कई अन्य गतिविधि जीवनचक्र विधियों को संसाधित किया गया है!
समाधान:
केवल एक बार पाठ सेट करें onCreate()- यह पहला पाठ होना चाहिए जो दिखाई दे।
A Runnableऔर a बनाएँHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
संभव के रूप में इस चल को स्थापित करें, onCreate()( संभव है, लेकिन नीचे मेरी सलाह पढ़ें):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
सलाह: सुनिश्चित करें कि आप एक Activityजीवन चक्र जानते हैं ! यदि आप onCreate()इस तरह से सामान बनाते हैं तो यह केवल तभी होगा जब आपका पहली बार Activityबनाया गया हो ! एंड्रॉइड संभवतः लंबे समय तक आपके जीवन को जीवित रखेगा , भले ही वह दिखाई न दे! जब कोई उपयोगकर्ता इसे फिर से शुरू करता है - और यह अभी भी मौजूद है - तो आप अपना पहला पाठ नहीं देखेंगे!Activity
=> हमेशा हैंडलर स्थापित करें onResume()और उन्हें अक्षम करें onPause()! अन्यथा आप "अपडेट" प्राप्त करेंगे जब आपका Activityबिल्कुल भी दिखाई नहीं दे रहा है! आपके मामले में, यदि आप अपना पहला पाठ फिर से सक्रिय होने पर देखना चाहते हैं, तो आपको इसे सेट करना होगा onResume(), नहीं onCreate()!
.setText()पूरे "विजेट" को उस पाठ के साथ बदल देता है जिसे आप इसे सेट करने के लिए कहते हैं; उस पाठ को शामिल करना जो आपने पहले ही वहां रखा है।