2010-07-19 14 views
5

क्या यह संभव है कि उस संदेश को मुख्य यूआई थ्रेड के हैंडलर और ब्लॉक तक एक संदेश को एनक्यू करना संभव हो, जब तक कि उस संदेश की सेवा नहीं की जाती?एंड्रॉइड: यूआई थ्रेड ऑपरेशन खत्म होने तक पृष्ठभूमि थ्रेड के लिए संभव है?

इसका संदर्भ यह है कि मैं अपनी रिमोट सेवा को थ्रेडपूल थ्रेड के बजाय प्रत्येक मुख्य ऑपरेशन को अपने मुख्य यूआई थ्रेड से सेवा करने के लिए चाहता हूं, जिससे आईपीसी अनुरोध प्राप्त हुआ।

उत्तर

4

यह आपको जो चाहिए वह करना चाहिए। यह इस विधि को प्रकृति में तुल्यकालिक बनाने के लिए ज्ञात ऑब्जेक्ट के साथ notify() और wait() का उपयोग करता है। run() के अंदर कुछ भी यूआई थ्रेड पर चलाएगा और एक बार समाप्त होने पर doSomething() पर नियंत्रण वापस कर देगा। यह निश्चित रूप से कॉलिंग थ्रेड को सोने के लिए रखेगा।

public void doSomething(MyObject thing) { 
    String sync = ""; 
    class DoInBackground implements Runnable { 
     MyObject thing; 
     String sync; 

     public DoInBackground(MyObject thing, String sync) { 
      this.thing = thing; 
      this.sync = sync; 
     } 

     @Override 
     public void run() { 
      synchronized (sync) { 
       methodToDoSomething(thing); //does in background 
       sync.notify(); // alerts previous thread to wake 
      } 
     } 
    } 

    DoInBackground down = new DoInBackground(thing, sync); 
    synchronized (sync) { 
     try { 
      Activity activity = getFromSomewhere(); 
      activity.runOnUiThread(down); 
      sync.wait(); //Blocks until task is completed 
     } catch (InterruptedException e) { 
      Log.e("PlaylistControl", "Error in up vote", e); 
     } 
    } 
} 
+1

मुझे समझ में नहीं आता कि स्ट्रिंग पर कॉलिंग अधिसूचना() क्या करेगी? –

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