2017-12-06 2 views
2

Ich habe eine Methode:kein Fehler für @MainThread Anmerkung

/** 
* Call event without a value 
*/ 
@MainThread 
public void call() { 
    setValue(null); 
} 

Und ich nenne es hier:

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     stopNavigation.call(); 
    } 
}).start(); 

Warum wird kein Fehler geworfen, weil ich diesen Anruf mache von außerhalb des Haupt Faden? Ich habe alles gelesen, was ich kann über die @MainThread Annotation (von android.support.annotation), aber nichts hat mich darüber informiert, was die Annotation tatsächlich tut.

Antwort

1

Soweit ich weiß, zeigt Android Studio nur die Warnung über Thread, wenn wir bestimmen alle Gewinde wie enter image description here

Hier ein Beispiel in Activity ist Anmerkungen

public class AActivity extends Activity { 

    @MainThread 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     getData(); 
    } 

    @AnyThread 
    private void getData() { 
     new Thread(new Runnable() { 
      @WorkerThread // MUST DEFINE THREAD HERE 
      @Override 
      public void run() { 
       updateUI(); // annotation error here 
      } 
     }).start(); 
    } 

    @MainThread 
    void updateUI() { 

    } 

    class A extends AsyncTask<Void, Void, Void> { 
     @WorkerThread // MUST DEFINE THREAD HERE 
     @Override 
     protected Void doInBackground(Void... voids) { 
      updateUI(); // annotation error here 
      return null; 
     } 
    } 
} 
+1

Ah ja gutes Beispiel zu arbeiten. scheint nicht sehr lohnend dann ... Ich werde das akzeptieren, wenn nichts anderes auftaucht – HaydenKai