2011-11-10 10 views
5

मेरे पास एक AsyncTask है जिसे मैं अगली गतिविधि पर जाने से पहले निष्पादित किया जाता है। इस AsyncTask के अंदर, मेरे पास MediaPlayer है।पर रोक के बाद AsyncTasks का क्या होता है?

protected void onPause() { 
      stopProgress(); 
      Log.i(TAG, "onPAUSE"); 
      try { 
      } finally { 
      // If we allocated a player, then cleanup after it 
      if (player != null) { 
       player.reset(); 
       player.release(); 
       player = null; 
       Log.d(TAG,"end of player cleanup"); 
          } 
      } 
      super.onPause(); 
     } 

उपयोग परिदृश्य: गतिविधि से 2 पर 1

  • ले जाएँ गतिविधि में

    1. क्लिक करें प्ले बटन से पहले खिलाड़ी भी भार (लॉग onPause से जानकारी निश्चित रूप से कहा जाता है)।
    2. गतिविधि 2 में, गतिविधि 1 के खिलाड़ी लोड होने पर खेलता है।
  • उत्तर

    3

    AsyncTask से कुछ भी नहीं होना चाहिए। यह चलना जारी रहेगा। हालांकि, पृष्ठभूमि में मीडिया प्लेयर चलाने के लिए यह एक शानदार तरीका नहीं है (इसके लिए एक सेवा का उपयोग करें)। आपका कोड मीडिया प्लेयर को रद्द कर देगा, लेकिन आपके AsyncTask में आपके पास जो कुछ है, उसके आधार पर, यह अभी भी सक्रिय हो सकता है। आप यह सुनिश्चित कर सकते हैं कि कार्य पर cancel (boolean mayInterruptIfRunning) पर कॉल करके AsyncTask को मार दिया गया है।

    तो जो भी कारण अपने MediaPlayer वस्तु अभी भी ऊपर कोड का उपयोग कर चल रहा है के लिए है, तो AsyncTask.cancel(true) फोन और void onCancelled (Result result) ओवरराइड और फिर अपने धागा भीतर से MediaPlayer मार डालते हैं। याद रखें, onCancelled केवल doInBackground रिटर्न के बाद बुलाया जाएगा (या आप समय-समय पर isCancelled() जाँच को देखने के लिए कुछ अपने धागे पर cancel() का आह्वान किया है, तो कर सकते हैं। मेरा मानना ​​है कि आप तो cancel(true) सेट करते हैं यह doInBackground समाप्त करने के लिए के लिए इंतज़ार कर परेशान नहीं करेगा, लेकिन निश्चित रूप से है कि साफ नहीं है।

    1

    मुझे नहीं पता कि आप वास्तव में AsyncTask में क्या कर रहे हैं, लेकिन इसे कभी भी जारी रखना चाहिए onPause() भी कहा जाता है। यदि onDestroy() कहा जाता है और आपके पास आपकी गतिविधि में आपकी AsyncTask संदर्भ सामग्री है, तो आप समस्याओं में भागने जा रहे हैं, हालांकि AsycnTask अनिवार्य रूप से शून्य सूचक अपवाद फेंकना शुरू कर देगा।

    +0

    वास्तव में, कार्य में, मैं प्लेयर = नया मीडियाप्लेयर() .... duh :) – hunterp

    +1

    सेट कर रहा हूं जब ऑनस्ट्रोय() कहा जाता है, तो एसिंक कार्य को रद्द किया जाना चाहिए। –

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