Supply własne adnotacje dla gwintu wnioskowania
inspekcji szarpie (o wdzięcznej nazwie „WrongThread”) nie można wywnioskować wątek, który jest wywołanie metody showToast
chyba podać adnotacje, które oznaczyć metodę jako jedną z @WorkerThread
etc .
Weź swój oryginalny kod i dodać @WorkerThread
adnotacji metody run
:
new Thread(new Runnable() {
@Override
@WorkerThread
public void run() {
showToast("");
}
}).start();
i będzie poprawnie generować ostrzeżenia inspekcji niestrzępiącą jak poniżej:
Szczególny przypadek AsyncTask
AsyncTask
ma swoje metody oznaczone odpowiednich adnotacji wątek (link to source):
@WorkerThread
protected abstract Result doInBackground(Params... params);
otrzymasz ostrzeżenie za darmo, jeśli się zdarzysz użycie AsyncTask
jak w poniższym przykładzie:
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 "";
}
Dla innych async wzorów trzeba będzie dodać własne @WorkerThread
lub inne adnotacje.
Pełną listę różnych wątków jest here:
@MainThread
@UiThread
@WorkerThread
@BinderThread
@AnyThread