मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

बैकग्राउंड में काम

यह पृष्ठ उस threading पैटर्न को समेकित करता है जो पिछले सभी पृष्ठों में दिखता है, उस दृष्टिकोण से जो भारी काम लिखता है। “क्यों” का उत्तर Paint thread में है।

कैनोनिकल टेम्पलेट

new Thread(() -> {
   var resultado = trabalhoPesado();        // I/O या CPU — कभी भी paint thread पर नहीं
   meuComponente.onUI(() -> {               // paint thread में फिर से प्रवेश करता है
      mostrar(resultado);                    // UI को केवल यहीं छुएं
      Component.repaint();
   });
}).start();

UI में पुनः प्रवेश करने के तरीके:

कॉल उपयोग
Component.onUI(Runnable) किसी भी thread से, एक कंपोनेंट से शुरू करते हुए
Main.runOnPaintThread(Runnable) वही, किसी कंपोनेंट के संदर्भ के बाहर
Main.runOnPaintThreadAndWait(Runnable) वही, समाप्त होने तक ब्लॉक करते हुए

किसी thread में UI इवेंट पर प्रतिक्रिया देना

जब किसी कंपोनेंट के हैंडलर को भारी काम चलाना हो, तो onActionThread का उपयोग करें (paint thread के बाहर चलता है) और onUI के साथ पुनः प्रवेश करें:

botao.onActionThread(c -> {
   var dados = baixar();                    // paint thread के बाहर
   c.onUI(() -> lista.setItems(dados));     // UI पर वापस
});

Timers

आवधिक काम (polling, watchdog) के लिए, फ़्रेमवर्क के timers का उपयोग करें:

comp.addTimer(1000);   // हर 1000 ms पर एक timer इवेंट फायर करता है (घटक में संभाला जाता है)

util की उपयोगिताएँ

  • ThreadSync — 2 threads की बैरियर (प्रोड्यूसर/कंज़्यूमर): start()/start(maxMillis), finished(resultado), getResult()। किसी दूसरी thread के परिणाम की timeout के साथ प्रतीक्षा करने के लिए उपयोगी।
  • RunnableWith<T> — तर्क के साथ कॉलबैक: void run(T obj)। यह उन कॉलबैक का प्रकार है जो एक मान देते हैं (उदा.: GPSThread का onError)।
ThreadSync sync = new ThreadSync();
new Thread(() -> { var r = calcular(); sync.finished(r); }).start();
sync.start(5000);                 // 5 s तक प्रतीक्षा करता है
Object r = sync.getResult();

सर्वोत्तम अभ्यास

  • सारा ब्लॉकिंग I/O (DB, HTTP, GPS, BLE) paint thread के बाहर चलता है।
  • UI को केवल onUI(...)/runOnPaintThread(...) के अंदर छुएँ।
  • स्क्रीन छोड़ते समय (onRemove() में) threads/timers को रोकें, वरना वे लीक होते हैं।

सामान्य त्रुटियाँ

  • onUI(...) के बिना किसी Thread से विजेट को छूना → अनियमित व्यवहार/हैंग।
  • runOnPaintThreadAndWait(...) को paint thread के भीतर से कॉल करना (deadlock) — वहाँ नॉन-ब्लॉकिंग वैरिएंट का उपयोग करें।
  • स्क्रीन बदलते समय Timers/threads का रद्द न होना।

यह भी देखें

क्या यह पृष्ठ उपयोगी था?