2010-12-13 13 views
12

मैं इस प्रकार हैंडलर है कि मैं का उपयोग कर रहा है:एंड्रॉयड, रोकना और पुनः चलाना हैंडलर कॉलबैक

handler.postDelayed(Play, 1000); 

जब अपने आवेदन onPause() कहा जाता है से पहले यह हो जाए, मैं इसे रोक सकते हैं और यह नहीं बताने की आवश्यकता जब तक मैं फिर से शुरू नहीं करता तब तक "पोस्टडेलेड" करने के लिए।

क्या यह संभव है, या क्या कोई वैकल्पिक तरीका है?

मेरी समस्या यह है कि जब ऑनपॉज़() कहा जाता है तो मैं ऑडियो (साउंडमैनेजर) को रोकता हूं, लेकिन अगर इस हैंडलर.postDelayed को उसके बाद बुलाया जाता है, तो ऑडियो को रोका नहीं जाएगा और पृष्ठभूमि में मेरे आवेदन के साथ खेलना जारी रहेगा ।

@Override 
public void onPause() 
{ 
    Soundmanager.autoPause() 
} 

लेकिन तब पोस्ट 1000 मिलीमीटर के बाद पोस्ट किया गया ऑडियो फिर से खेलना शुरू कर देता है।

@Override 
public void onPause() 
{ 
    handler.removeCallbacks(Play); 
    Soundmanager.autoPause() 
} 

जर्मन

उत्तर

13

आप की कोशिश की के साथ है जब आप इसे पुनरारंभ करना चाहते हैं):

class MyHandler extends Handler { 
    Stack<Message> s = new Stack<Message>(); 
    boolean is_paused = false; 

    public synchronized void pause() { 
     is_paused = true; 
    } 

    public synchronized void resume() { 
     is_paused = false; 
     while (!s.empty()) { 
      sendMessageAtFrontOfQueue(s.pop()); 
     } 
    } 

    @Override 
    public void handleMessage(Message msg) { 
     if (is_paused) { 
      s.push(Message.obtain(msg)); 
      return; 
     }else{ 
       super.handleMessage(msg); 
       // otherwise handle message as normal 
       // ... 
     } 
    } 
    //... 
} 
+1

हां, लेकिन अगर मैं इसे फिर से शुरू करता हूं, तो कॉलबैक को हटाया जाने वाला ध्वनि कभी भी खेलना शुरू नहीं हुआ फिर से शुरू करने के लिए कुछ भी नहीं है। मैं अभी भी उस ध्वनि को फिर से शुरू करना चाहता हूं। (या इसे शुरू करें अगर यह पहले से शुरू नहीं हुआ है)। – Hamid

+3

आप ऑनस्यूम विधि को कार्यान्वित कर सकते हैं और हैंडलर.postDelayed (Play, 1000) निष्पादित कर सकते हैं; – ggomeze

+2

यह बहुत समय पहले था, और इस सवाल के बाद मेरे पास महत्वपूर्ण एंड्रॉइड अनुभव है। मैं इस जवाब को स्वीकार करूंगा क्योंकि इसमें सही है कि मुझे रोकते समय कॉलबैक को हटा देना चाहिए। – Hamid

16

आप Handler उपवर्ग और इस प्रकार है (फिर बस handler.pause() फोन जब आप संदेश से निपटने को रोकना चाहते हैं, और handler.resume() फोन रोकें/फिर से शुरू तरीकों को लागू करने की जरूरत है:

+2

काम करना, धन्यवाद आदमी। यह स्वीकार्य उत्तर होना चाहिए। –

+0

धागे के लिए 'रन' विधि कहां है? – Si8

+1

कोई रन विधि नहीं है। एक हैंडलर एक अलग धागा नहीं है (यह आपके धागे के भीतर चलता है)। – CpnCrunch

संबंधित मुद्दे