2017-06-19 21 views
9

का निरीक्षण नहीं किया जा रहा मैं डेवलपर कि एक विधि मुख्य थ्रेड में होना आवश्यक है सूचित करना चाहते हैं तो मैं निम्नलिखित कोड को लिखा था:का प्रयोग धागा एनोटेशन के रूप में उम्मीद

@MainThread 
    public void showToast(@NonNull String text) { 
     Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 
    } 

से मैं ने लिखा है:

new Thread(new Runnable() { 
     @Override 
     public void run() { 
      showToast(""); 
     } 
    }).start(); 

और संकलक इसे और अन्य एनोटेशन के विपरीत त्रुटि के रूप में चिह्नित नहीं करता है।

कोई विचार क्यों?

उत्तर

7

आपूर्ति अपने धागा अनुमान

फाहा निरीक्षण (जिसे उपयुक्त नाम "WrongThread") धागा कि showToast विधि बुला रहा है जब तक आप एनोटेशन कि @WorkerThread आदि में से एक के रूप में एक विधि को चिह्नित की आपूर्ति अनुमान नहीं लगा सकता के लिए खुद का एनोटेशन ।

अपने मूल कोड ले लो और run विधि के लिए @WorkerThread टिप्पणी जोड़ने:

new Thread(new Runnable() { 
    @Override 
    @WorkerThread 
    public void run() { 
     showToast(""); 
    } 
}).start(); 

और इसे सही ढंग फाहा निरीक्षण के रूप में नीचे चेतावनी उत्पन्न करेगा:

: AsyncTask

AsyncTask के लिए

lint inspection warning

विशेष मामला अपने तरीकों सही धागा एनोटेशन (link to source) से चिह्नित किया गया है

@WorkerThread protected abstract Result doInBackground(Params... params); 

यदि आप होते हैं तो आपको मुफ्त में चेतावनी मिल जाएगी निम्न उदाहरण में एक AsyncTask की तरह उपयोग करने के लिए:

new AsyncTask<String, String, String>() { 
    @Override 
    protected String doInBackground(String... strings) { 
     showToast(""); //warning here: method showToast must be called from the main thread 
         //currently inferred thread is worker 
     return ""; 
    } 

अन्य async पैटर्न के लिए आप अपने खुद के @WorkerThread या अन्य टिप्पणियां जोड़ने के लिए होगा।

अलग धागे की पूरी सूची here है:

@MainThread 
@UiThread 
@WorkerThread 
@BinderThread 
@AnyThread 
संबंधित मुद्दे