2016-04-03 4 views
5

मैं एंड्रॉइड के लिए बहुत नया हूं। उम्मीद है कि यह एक बेवकूफ सवाल नहीं है।प्रारंभ एक्टिवेटी एक अलग थ्रेड में

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    new Thread(new Runnable() 
    { 
     public void run() 
     { 
      Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
      startActivity(intent); 
     } 
    }).start(); 
} 

प्रश्न: यह क्यों काम करता है? क्या यह सामान्य है कि प्रारंभिक धागे से प्रारंभिकता को बुलाया जा सकता है?

मैंने सोचा कि सभी यूआई संबंधित चीजों को यूआई थ्रेड में किया जाना था।

+0

'.run()' वर्तमान धागे पर कोड चलाता है। आपको इसे नए थ्रेड पर चलाने के लिए '.start()' को कॉल करना चाहिए। सवाल का जवाब नहीं देता है लेकिन कम से कम आपको यह बताना है कि यह आपके प्रश्न का वास्तविक परीक्षण नहीं है। –

+0

@ जॉर्ज मॉलिगन आप सही हैं, लेकिन यह एक टाइपो था। मेरा मतलब शुरू हुआ(), मेरा बुरा। मैं डौग के जवाब को स्वीकार नहीं कर सकता, ऐसा लगता है कि 9 मिनट का इंतजार है ... – James

उत्तर

3

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

आपको मुख्य धागे को छोड़कर कहीं भी दृश्य पदानुक्रम को छूना नहीं है। यह एक अलग मुद्दा है।

1

startActivity विधि किसी भी Activity Context

से कहा जा सकता है धागा का एक नया उदाहरण Context के लिए उपयोग, जो बारी में एक Activity है है। यही कारण है कि आपका कोड काम कर रहा है।

ध्यान दें कि यदि इस विधि एक Activity Context के बाहर से बुलाया जा रहा है, तो IntentFLAG_ACTIVITY_NEW_TASK लांच ध्वज शामिल करना चाहिए। ऐसा इसलिए है क्योंकि, मौजूदा Activity से शुरू किए बिना, कोई मौजूदा कार्य नहीं है जिसमें नई गतिविधि डालें और इस प्रकार इसे अपने स्वयं के अलग-अलग कार्य में रखा जाना चाहिए।

इस विधि ActivityNotFoundException फेंकता है तो वहाँ था कोई Activity दिया आशय को चलाने के लिए मिल गया।

अधिक जानकारी के लिए, पढ़ने के this developer manual

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