2009-10-29 13 views
5

में किसी विशेष थ्रेड को शेड्यूल कैसे कर सकता हूं, मैं किसी विशेष समय अंतराल के साथ थ्रेड को ऑटो-शेड्यूल करना चाहता हूं। मुझे डिवाइस में लटकने के बिना लगातार पृष्ठभूमि में इसे निष्पादित करने की भी आवश्यकता है।मैं ब्लैकबेरी

मैंने एप्लिकेशन मैनेजर क्लास के साथ यह कोशिश की है लेकिन यह एप्लिकेशन शेड्यूलिंग के लिए है और मुझे एप्लिकेशन के भीतर थ्रेड शेड्यूल करने की आवश्यकता है।

उत्तर

6

मैं TimerTask का प्रयोग करेंगे:

public class MyScreen extends MainScreen { 
    private Timer mTimer; 
    public MyScreen() {   
     mTimer = new Timer(); 
     //start after 1 second, repeat every 5 second 
     mTimer.schedule(mTimerTask, 0, 5000); 
    } 

    TimerTask mTimerTask = new TimerTask() { 
     public void run() { 
      // some processing here 
     } 
    }; 
} 

देख BlackBerry API Hidden Gems (Part Two)

0

जब तक एप्लिकेशन चल रहा है - बस थ्रेड बनाएं और प्रत्येक बिट के काम के बाद Thread.sleep जब तक आपको निष्क्रिय रहने के लिए इसकी आवश्यकता हो।

Date wakeUpAt = ...; // Get this however 
Date now = new Date(); 
long millisToSleepFor = wakeUpAt.getTime() - now.getTime(); 
Thread.sleep(millisToSleepFor); 
+0

धन्यवाद लेकिन नींद में यह भी समय (लंबी millisToSleepFor) समय के लिए लटका हुआ है। – Rishabh

+0

क्या आप कह रहे हैं कि थ्रेड सो रहा है, डिवाइस किसी अन्य धागे को निर्धारित नहीं करता है? नींद का पूरा बिंदु() यह है कि थ्रेड उस समय के लिए सीपीयू पर निर्धारित नहीं है ... –

2

उपयोग UiApplication.getUiApplication().invokeLater() यह एक देरी स्वीकार करता है:

आप इसे की जरूरत है एक विशेष समय पर अप जगाने के लिए, बजाय सिर्फ एक विशेष समय के लिए सोने, तो आप निम्नलिखित की तरह कुछ कर सकते हैं और पैरामीटर दोहराएं और आपको वही काम करेगा जो आपको चाहिए।

संपादित

मैं जानता हूँ कि इस पोस्ट पुराना है लेकिन इस दोहराए जाने वाले ईवेंट शेड्यूल करने के लिए अब तक सबसे अच्छा विकल्प के द्वारा होता है और मैं जोड़ने के लिए है कि अनुसूचित घटना के बाद आवश्यक है बंद करना चाहते हैं:

//Start repeating "runnable" thread every 10 seconds and save the event ID 
int eventId = UiApplication.getUiApplication().invokeLater(runnable, 10000, true); 

//Cancel the repetition by the saved ID 
UiApplication.getUiApplication().cancelInvokeLater(eventId); 
+0

ठीक है, लेकिन क्या कोई तरीका है कि किसी दिए गए विलंब पर आवेदन से बाहर निकलने के बाद थ्रेड उत्साहित होना शुरू होता है उदाहरण के लिए 1 की देरी दिन। – Rishabh

+0

आप UiAplication.getUiAplication() अनुरोध कर सकते हैं। अनुरोध बैकग्राउंड(); पृष्ठभूमि में चल रहे ऐप को छोड़ने के लिए आपके ओवरराइड ऑनक्लोज़() विधि में, लेकिन (afaik) अनुप्रयोग संदर्भ बिंदु से शुरू होने वाले किसी भी थ्रेड को शेड्यूल किए गए थ्रेड समेत ठीक से बंद होने के बाद मार दिया जाएगा। – Lisandro

1

मान लीजिए कि आप इसे डिवाइस स्टार्टअप पर थ्रेड चलाने के लिए चाहते हैं: एक दूसरी परियोजना बनाएं और उसे वैकल्पिक प्रविष्टि बिंदु के रूप में सूचीबद्ध करें। आपके यूआई एप्लीकेशन या एप्लिकेशन मुख्य() में, परियोजना में पारित तर्क की जांच करें। Thread.sleep के माध्यम से वहां अपनी आवधिक सामग्री करें और enterEventDispatcher को कॉल न करें। "स्वत: प्रारंभ" के लिए

खोज: http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf

या यदि आप कुछ करना चाहता हूँ एक बार एक उपयोगकर्ता "शुरू होता है" यह है, तो अपने समय सामान करने के लिए एक नया धागा बनाने में लग रही है। अपनी स्क्रीन के ऑनक्लोज़() को ओवरराइड करें और स्क्रीन को पृष्ठभूमि में फेंकने के लिए application.getActivation()। निष्क्रिय करें() का उपयोग करें।

या इस तरह कुछ ऐसा करने का कोई अन्य तरीका है जैसे invokeLater, आदि। शायद ईवेंटलिस्टर्स जो भी आपको चाहिए, कर सकते हैं, लेकिन आपने बहुत सारे विवरण नहीं दिए।

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