Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Pasando referencia a la actividad a la clase de utilidad android

Me doy cuenta de que esta pregunta se ha hecho muchas veces, pero todavía no puedo entender completamente este concepto. En mi aplicación, estoy usando una clase de utilidad estática para mantener métodos comunes (como mostrar diálogos de error)

Así es como se ve mi clase estática:

  • ¿Puede un widget de casa tener un Contexto?
  • ¿Cuál es la forma correcta de comunicarse desde una Vista personalizada a la Actividad en la que reside?
  • Diferencia en contexto esto y getContext ()
  • Cómo obtener el contexto de la aplicación
  • Cómo llamar a getResources () de una clase que no tiene contexto?
  • Android ApplicationTestCase utilizando un MockContext
  • public class GlobalMethods { //To show error messages public static final void showSimpleAlertDialog(final Activity activity, String message, final boolean shouldFinishActivity) { if (!activity.isFinishing()) { AlertDialog.Builder builder = new AlertDialog.Builder(activity, AlertDialog.THEME_HOLO_DARK); builder.setCancelable(true).setMessage("\n" + message + "\n").setNeutralButton(activity.getResources().getString(R.string.label_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.cancel(); } }).setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub if (shouldFinishActivity) activity.finish(); } }).show(); } } //check for connectivity public static final boolean isOnline(Context context) { NetworkInfo networkInfo = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); return (networkInfo != null && networkInfo.isConnectedOrConnecting()); } //for the 'HOME' button on every activity public static final void goToDashboard(Activity activity) { goToActivity(ActivityDashboard.class, activity); } } 

    En mi actividad principal, llamo a esta función como esta

     GlobalMethods.showSimpleAlertDialog(this, R.string.error_msg_failed_load, true); 

    ¿Es esto un buen enfoque? ¿Esto causa fugas de memoria? En caso afirmativo, sírvase orientarme sobre las mejores prácticas sobre el uso de clases de utilidad

  • Finalizar la actividad de llamada cuando se completa AsyncTask
  • Guardar estado de fragmentos con el cajón de navegación
  • Android - ¿Es posible cajón de navegación desde el lado derecho?
  • ¿Por qué FileOutputStream lanzar FileNotFoundException?
  • ActionBarDrawerToggle no está configurando el Indicador de cajón
  • El gaviota de navegación de Android no pasa onTouchEvent a la actividad
  • One Solution collect form web for “Pasando referencia a la actividad a la clase de utilidad android”

    No, es un mal enfoque. Es mejor pasar a WeakReference<Activity> a sus métodos, e implementar métodos como este:

     public static final void showSimpleAlertDialog(final WeakReference<Activity> mReference, String message, final boolean shouldFinishActivity) { Activity activity = mReference.get(); if (activity != null) { //your code goes here } 

    Más información: http://android-developers.blogspot.ae/2009/01/avoiding-memory-leaks.html

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.