support studio not nonnull error annotation android android-studio annotations metadata

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