मेरे पास निम्नलिखित कोड है।एंड्रॉइड, हैंडलर मुख्य धागे या अन्य थ्रेड में चल रहा है?
public class SplashScreen extends Activity {
private int _splashTime = 5000;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
new Handler().postDelayed(new Thread(){
@Override
public void run(){
Intent mainMenu = new Intent(SplashScreen.this, MainMenu.class);
SplashScreen.this.startActivity(mainMenu);
SplashScreen.this.finish();
overridePendingTransition(R.drawable.fadein, R.drawable.fadeout);
}
}, _splashTime);
}
}
मुझे इस कोड का विश्लेषण करने में समस्या है। जहां तक पता है कि हैंडलर मुख्य धागे में चल रहा है। लेकिन इसमें थ्रेड है जो अन्य धागे में चल रहा है।
MainMenu.class मुख्य धागे या दूसरे धागे में चलाया जाएगा? यदि मुख्य धागा 5 सेकंड के लिए बंद कर दिया गया है तो एएनआर उठाया जाएगा। क्यों जब मैं देरी (_splashTime)
साथ यह रोक रहा ANR प्रदर्शित नहीं करता है (भले ही मैं इसे अधिक से अधिक 5 सेकंड के लिए वृद्धि)
धन्यवाद श्री मर्फी। यह दिखाता है कि मुझे किस हद तक जावा और एंड्रॉइड की अवधारणाएं नहीं मिलीं :) मैंने सोचा कि जब हमारे पास नए हैंडलर() में "नया थ्रेड()" है। पोस्टडेलेड तो नया धागा बनाया जाएगा। – Hesam
@ हेसम: ठीक है, आप 'थ्रेड' ऑब्जेक्ट का उदाहरण बना रहे हैं। हालांकि, एक वास्तविक ओएस * थ्रेड * तब तक नहीं बनाया जाता है जब तक कोई आपके 'थ्रेड' ऑब्जेक्ट पर 'प्रारंभ() 'को कॉल नहीं करता है। चूंकि 'पोस्टडेलेड() 'केवल' रननेबल 'के रूप में ऑब्जेक्ट के बारे में सोच रहा है,' पोस्टडेलेड()' 'start()' को कॉल नहीं करेगा, बस 'रन() '। इसलिए, आपका 'रन() 'कोड मुख्य अनुप्रयोग थ्रेड पर निष्पादित किया जाएगा, पृष्ठभूमि थ्रेड नहीं। – CommonsWare
एक ही जवाब में बहुत उपयोगी जानकारी। –