2012-12-27 8 views
9

मैं समानांतर में 4 धागे चलाने की कोशिश कर रहा हूं, लेकिन असफल रहा हूं।एंड्रॉइड में बहु-थ्रेडिंग कैसे काम करता है?

मैं तुल्यकालिक wait() और notify()CyclicBarrierThreadPoolExecutorCountDownLatchAsyncTask और कई अन्य लोगों का उपयोग कर की कोशिश की है, लेकिन समानांतर में धागे चल प्रबंधन नहीं किया।

क्या हम समांतर में 4 धागे चला सकते हैं (यानी एंड्रॉइड में एक ही समय में)? कैसे?

नोट: मैं AudioRecord और AudioTrack API का उपयोग कर ऑडियो स्ट्रीमिंग के साथ काम कर रहा हूं।

+0

पर भरोसा कर सकते हैं क्या आप समस्या का विस्तार कर सकते हैं? – Henry

+0

@ हेनरी मैं एक समय में सभी 4 धागे चलाने में सक्षम नहीं हूं। इसे कैसे प्राप्त करें? –

उत्तर

13

क्या हम एंड्रॉइड में एक ही समय में 4 थ्रेड समांतर i.e चला सकते हैं ??

हां, आप समानांतर में 4 धागे चला सकते हैं। अधिक धागे जोड़ना आम तौर पर मदद करता है, लेकिन कुछ बिंदु के बाद, वे कुछ प्रदर्शन गिरावट का कारण बनते हैं। लेकिन 4 धागे किसी मुद्दे का कारण नहीं बनेंगे।

मुद्दे: 4 बार, 2 3 4 एन केवल 1 समय: मैं धागा समानांतर अर्थात 1 धागे चलाता है चलाने के लिए सक्षम नहीं हूँ। इसे कैसे चलाया जाए ( का उपयोग थ्रेड का उपयोग करने का प्रयास किया लेकिन सभी धागे समानांतर चलाने में असफल) समानांतर?

अपने लक्ष्य को सभी थ्रेड सक्रिय रूप से प्रसंस्करण के लिए बस है, तो मैं (Executors अधिक आम तौर पर और) जावा thread pools पर सुझाव देते हैं।

एंड्रॉइड समर्थन बहु-थ्रेडिंग? यदि हां एंड्रॉइड में बहु-थ्रेडिंग कैसे काम करती है ??

हां, एंड्रॉइड मल्टीथ्रेडिंग का समर्थन करता है। यह (थ्रेड पूल और निर्वाहक के अलावा अन्य) को लागू करने की सबसे पसंदीदा तरीका AsyncTask

AsyncTasc आप doInBackground(), जहाँ आपके धागा अपने कार्य पर दूर क्रैंक कर सकते हैं लागू करने के लिए अनुमति देता है। यह Thread से प्राप्त कार्यक्षमता के समान है।

असली जादू होता है जब आप onPreExecute() और onPostExecute(), जो दोनों यूआई धागा पर क्रियान्वित कर रहे हैं ओवरराइड। यह आपको अपनी गतिविधि के बारे में संदेश प्राप्त करने से रोक नहीं सकता है।

यह answer में AsyncTask के लिए एक छोटा कोड उदाहरण शामिल है जो आपको प्रारंभ कर सकता है।

इसके अलावा, मैं क्या पाया दौरान अपना शोध है कि,, रिकॉर्डिंग भेजने और ऑडियो प्राप्त सभी काफी इंटरैक्टिव preocesses हैं और वे सिंक और आईओ संसाधनों की आवश्यकता एंड्रॉयड

संपादित में Handlers पर एक नजर है। इसके लिए सबसे अच्छा संभव समाधान हो सकता है, आप प्रत्येक ऑपरेशन के लिए अलग Async कार्य बना सकते हैं, ताकि प्रत्येक ऑपरेशन अपने अलग Async कार्य में किया जा सके।

+0

धन्यवाद .. लेकिन जब मैं AsyncTask को आजमा रहा हूं, तो मैं कई ऑडियो डेटा खो रहा हूं। यानी मैं AsyncTask का उपयोग कर सर्वर पर ऑडियो वॉयस डेटा भेज रहा हूं, इसे भेजने के लिए अपना समय ले रहा हूं। उस समय तक मैं ऐप साइड पर वॉयस डेटा खो दूंगा। –

+0

मुझे Async कार्य के साथ किसी भी समस्या का सामना नहीं करना पड़ा है, फिर भी यदि आप समवर्ती धागे का उपयोग करना चाहते हैं, तो आप थ्रेड पूल और निष्पादकों पर एक नज़र डाल सकते हैं। –

+0

मैंने भी कोशिश की .. मैं ऑडियो डेटा 16 केबी प्रति 40ms रिकॉर्ड कर रहा हूं। इसमें एक और थ्रेड समानांतर चलाने के लिए समय लगता है। –

-4

आप समानांतर में चलाने के लिए Async कार्य का उपयोग कर सकते हैं।

+0

मैंने यह कोशिश की है .. लेकिन इसे निष्पादित करने में अपना समय लगता है। एन ने मेरी मदद नहीं की है .. मैं AsyncTask –

+4

@Taruni के साथ काम कर रहे कई ऑडियो डेटा खो देंगे, कृपया टिप्पणी की जानी चाहिए !! – swiftBoy

2
  1. आप 4 अलग-अलग थ्रेड चला सकते हैं, लेकिन क्रम में समानांतर (एक साथ) निष्पादित करने के लिए आपको आर्क का समर्थन करना होगा। यदि आपके पास एक कोर सीपीयू है, तो ऑर्डर जो थ्रेड एक्सा्यूट किया गया है, शेड्यूलर तक है और समय पर केवल एक थ्रेड निष्पादित किया जाएगा
  2. निष्पादन का क्रम और समय शेड्यूलर तक है।
  3. हाँ यह करता है। आप AsyncTask या जावा सुविधाओं (एक्जिक्यूटर्स उदा।)
संबंधित मुद्दे