मेरे पास एक छोटा परीक्षण एप्लिकेशन है जिस पर मैं काम कर रहा हूं जिसमें एक टाइमर है जो 100 से 0 तक उलटी गिनती के लिए टेक्स्टव्यू अपडेट करता है। यह ठीक काम करता है, लेकिन अब मैं एप्लिकेशन को रोकने की कोशिश कर रहा हूं यदि उपयोगकर्ता दबाता है फोन पर बैक बटन और उसके बाद टाइमर को पुनरारंभ करें जहां से उन्होंने ऐप को फिर से खोल दिया था।ऑन पॉज़/ऑनर्यूज़ गतिविधि समस्याएं
@Override
public void onPause()
{
if(this._timer_time_remaining > 0) {
this.timer.cancel();
}
super.onPause();
Log.v("Pausing", String.format("Pausing with %d", this._timer_time_remaining));
}
@Override
public void onResume()
{
Log.v("Resuming", String.format("Resuming with %d", this._timer_time_remaining));
if(this._timer_time_remaining > 0) {
start_timer(this._timer_time_remaining);
}
super.onResume();
}
start_timer() प्रणाली CountDownTimer जो onTick विधि में TextView अद्यतन करता है और this._timer_time_remaining पूर्णांक चर अद्यतन करता है बनाता है: यहाँ कोड मैं का उपयोग कर रहा है।
CountDownTimer और _timer_time_remaining दोनों वर्ग इस तरह के स्तर पर घोषित किया गया है:) प्रिंट
private CountDownTimer timer;
private int _timer_time_remaining;
Log.v से
(मुझे लगता है कि _timer_time_remaining चर जब onPause कहा जाता है संग्रहीत सेकंड की सही संख्या है, लेकिन जब रीस्यूम शुरू होता है तो यह 0 पर वापस सेट होता है। चर रीसेट क्यों हो जाता है? मैंने सोचा कि एप्लिकेशन पृष्ठभूमि में समान मानों के साथ चलना जारी रखेगा। क्या मैं कुछ भूल रहा हूँ? यह सब एक कक्षा में घोषित किया गया है जो गतिविधि को बढ़ाता है।
अग्रिम धन्यवाद!
नोट: कोड को कॉपी
सबसे पहले, प्रतिक्रिया के लिए धन्यवाद। मैंने ऑन-वेव विधि को ऑनसेवस्टेंसस्टेट (बंडल सेव किया गयांस्टैंस्टेट) विधि के साथ बदल दिया, लेकिन ऐसा लगता है कि जब मैं अपना एप्लिकेशन छोड़ने के लिए बैक बटन दबाता हूं तो ऐसा नहीं लगता है। मेरे लॉगकाट संदेशों में से कोई भी दिखाई नहीं देता है इसलिए मुझे नहीं लगता कि इसे बिल्कुल बुलाया जा रहा है। क्या मुझे रोकना है और ऑनवेस्टेंसस्टेट लागू किया गया है? या SaveInstanceState पर इसे संभालना चाहिए? – Blather
दस्तावेज़ीकरण यह बताता है: "ऑन पॉज़() और ऑनस्टॉप() पर एक उदाहरण कहा जाता है और यह नहीं है कि यह विधि तब होती है जब कोई उपयोगकर्ता गतिविधि बी से गतिविधि ए पर वापस जाता है: बी पर SaveInstanceState (बंडल) पर कॉल करने की आवश्यकता नहीं है क्योंकि वह विशेष उदाहरण कभी भी बहाल नहीं किया जाएगा, इसलिए सिस्टम इसे कॉल करने से बचाता है। " वापस दबाकर SaveInstanceState पर कॉल नहीं करता है लेकिन होम दबाता है। –
जवाब देने के लिए धन्यवाद। मैंने देखा कि मैंने उल्लेख किया है, लेकिन यदि बैक बटन दबाया जाता है तो SaveInstanceState को कॉल नहीं किया जाता है, तो यह मेरी समस्या का ख्याल नहीं रखेगा, है ना? मैं सिर्फ बैक बटन दबाए जाने पर रोकने के लिए टाइमर को गिनना चाहता हूं और फिर उसी स्थान से पुनरारंभ करना चाहता हूं जब ऐप होम स्क्रीन से फिर से शुरू होता है। मैं गलतफहमी हो सकता हूं, लेकिन ऐसा नहीं लगता है कि यह पूरा करेगा। अब तक मदद करने के लिए धन्यवाद, धन्यवाद, मुझे बस कुछ ऐसा याद आ रहा है जो मुझे लगता है। – Blather