not - edit configuration android studio
El uso de la anotación de hilos no se inspeccionó como se esperaba (1)
Quiero notificar al desarrollador que se requiere un método para estar en el hilo principal, así que escribí el siguiente código:
@MainThread
public void showToast(@NonNull String text) {
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
}
de lo que escribí:
new Thread(new Runnable() {
@Override
public void run() {
showToast("");
}
}).start();
y el compilador no marcó esto como un error a diferencia de @StringRes
y otras anotaciones que utilicé.
alguna idea por que?
Proporcione sus propias anotaciones para la inferencia de hilos
La inspección de pelusas (acertadamente llamada "WrongThread") no puede inferir el hilo que está llamando al método showToast
menos que proporcione anotaciones que marquen un método como uno de @WorkerThread
etc.
Tome su código original y agregue la anotación @WorkerThread
al método de run
:
new Thread(new Runnable() {
@Override
@WorkerThread
public void run() {
showToast("");
}
}).start();
y generará correctamente la advertencia de inspección de pelusa de la siguiente manera:
Caso especial para AsyncTask
AsyncTask
tiene sus métodos marcados con las anotaciones de hilos correctos ( enlace a la fuente ):
@WorkerThread
protected abstract Result doInBackground(Params... params);
AsyncTask
la advertencia de forma gratuita si usa una AsyncTask
como en el siguiente ejemplo:
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 "";
}
Para otros patrones asíncronos, deberá agregar su propio @WorkerThread
u otras anotaciones.
La lista completa de diferentes hilos está aquí :
@MainThread
@UiThread
@WorkerThread
@BinderThread
@AnyThread