2012-11-06 35 views
7

मुझे निम्नलिखित समस्या मिली है। मैं इस तरह अलग थ्रेड में MapView पर मार्ग drawning हूँ:क्यों मिलता है हैंडलर() शून्य वापस आता है?

public void drawRoute(final MapView mapView) { 
      new Thread(new Runnable() { 
      public void run() { 
      try { 
      //Do something useful 
      } catch (SomeException se) { 
      Handler handler = mapView.getHandler(); 
      handler.post(/*show error in UI thread*/) 
      }} 
     }).start(); 
     } 

लेकिन जब मैं हैंडलर प्राप्त यह शून्य देता है, हालांकि डिबग मोड में हैंडलर लौट आए और त्रुटि संदेश प्रदर्शित होता है। समस्या क्या हो सकती है?

पीएस हो सकता है कि हैंडलर प्राप्त करने का गलत तरीका हो, लेकिन मुझे इसके बारे में जानकारी नहीं मिली।

+0

मुझे विश्वास है कि आप मुख्य धागे के बाहर कुछ भी नहीं खींच सकते हैं। इसे देखें: http://android-developers.blogspot.com.br/2009/05/painless-threading.html – Bilthon

+0

हां, आप सही हैं, लेकिन मैं यूआई थ्रेड में ओवरले जोड़ता हूं और फिर postVvalidate को मानचित्र पर देखता हूं, दृश्य है अलग धागे में केवल गणना। – Bracadabra

+0

आपको शायद – njzk2

उत्तर

21

getHandler विधि रिटर्न null क्योंकि दृश्य संलग्न नहीं है:

public Handler getHandler() { 
    if (mAttachInfo != null) { 
     return mAttachInfo.mHandler; 
    } 
    return null; 
} 

mAttachInfodispatchAttachedToWindow में स्थापित है और dispatchDetachedFromWindow में nulled है।

mapView.getHandler().post() के बजाय आप उपयोग कर सकते हैं सीधे mapView.post() (जो getHandler().post() या ViewRootImpl.getRunQueue().post() उपयोग करने के लिए लगता है)।

+0

धन्यवाद! पोस्ट का उपयोग करना, यह वास्तव में सरल और उपयोगी हो जाता है। – yuku