Activity, AppCompatActivity, FragmentActivity y ActionBarActivity: ¿Cuándo usar cuál?


Vengo de iOS donde es fácil y simplemente usa un UIViewController. Sin embargo, en Android las cosas parecen mucho más complicadas, con ciertos componentes de UIC para niveles de API específicos. Estoy leyendo BigNerdRanch para Android (el libro tiene aproximadamente 2 años) y sugieren que use Activity para alojar mi FragmentActivities. Sin embargo, pensé que Activity estaba en desuso.

Entonces, para el nivel de API 22 (con un soporte mínimo para el Nivel de API 15 o 16), qué debo usar exactamente para alojar los componentes y para ¿componentes en sí? ¿Hay usos para todos estos, o debería usar uno o dos casi exclusivamente?

Author: Majid, 2015-07-08

9 answers

Pensé que la actividad estaba en desuso{[23]]}

No.

Entonces, para el nivel de API 22 (con un soporte mínimo para el Nivel de API 15 o 16), ¿qué debo usar exactamente para alojar los componentes y para los componentes en sí? ¿Hay usos para todos estos, o debería usar uno o dos casi exclusivamente?

Activity es la línea de base. Toda actividad hereda de Activity, directa o indirectamente.

FragmentActivity es para uso con el backport de fragmentos encontrados en las bibliotecas support-v4 y support-v13. La implementación nativa de fragments se agregó en el nivel de API 11, que es inferior a los valores minSdkVersion propuestos. La única razón por la que debería considerar FragmentActivity específicamente es si desea usar fragmentos anidados (un fragmento que contiene otro fragmento), ya que no se admitía en fragmentos nativos hasta el nivel de API 17.

AppCompatActivity es de la biblioteca appcompat-v7. Principalmente, esto ofrece un backport de la barra de acción. Desde la acción nativa bar se agregó en el nivel de API 11, no necesita AppCompatActivity para eso. Sin embargo, las versiones actuales de appcompat-v7 también añaden un backport limitado de la estética de Material Design, en términos de la barra de acciones y varios widgets. Hay pros y contras de usar appcompat-v7, mucho más allá del alcance de esta respuesta específica de desbordamiento de pila.

ActionBarActivity es el nombre antiguo de la actividad base de appcompat-v7. Por varias razones, querían cambiar el nombre. A menos que alguna biblioteca de terceros que esté utilizando insista en una ActionBarActivity, deberías preferir AppCompatActivity sobre ActionBarActivity.

Entonces, dado su minSdkVersion en el rango 15-16:

  • Si desea el aspecto de Diseño de material backported, use AppCompatActivity

  • Si no, pero desea fragmentos anidados, utilice FragmentActivity

  • Si no, use Activity

Simplemente agregando desde comentario como nota: AppCompatActivity extiende FragmentActivity, por lo que cualquier persona que necesite usar características de FragmentActivity puede usar AppCompatActivity.

 260
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-14 17:19:59

Activity es la clase base de todas las demás actividades, no creo que sea obsoleta. La relación entre ellos es:

Activity FragmentActivity AppCompatActivity ActionBarActivity

' dijo ActionBarActivity está obsoleta, use AppCompatActivity en su lugar.

Así que básicamente, usar AppCompatActivity es siempre la elección correcta. Las diferencias entre ellos:

  • Activity es el básico.
  • Basado en Activity, FragmentActivity proporciona la capacidad de utilizar Fragment.
  • Basado en FragmentActivity, AppCompatActivity proporciona características a ActionBar.
 59
Author: Ted Yu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-14 09:57:56

2018: Use AppCompatActivity

En el momento de escribir esto (verifique el enlace para confirmar que sigue siendo cierto), la Documentación de Android recomienda usar AppCompatActivity si está utilizando una Barra de aplicaciones.

Este es el racional dado:

A partir de Android 3.0 (nivel de API 11), todas las actividades que utilizan el tema predeterminado tiene una barra de acción como barra de aplicaciones. Sin embargo, la barra de aplicaciones las características se han agregado gradualmente a la barra de acción nativa varios lanzamientos de Android. Como resultado, la barra de acción nativa se comporta de manera diferente dependiendo de qué versión del sistema Android un dispositivo puede estar usando. Por el contrario, las características más recientes se añaden a la soporta la versión de Toolbar de la biblioteca, y están disponibles en cualquier dispositivo que puede usar la biblioteca de soporte.

Por esta razón, debe usar la clase Toolbar de la biblioteca de soporte para implementa las barras de aplicaciones de tus actividades. Uso de la biblioteca de soporte la barra de herramientas ayuda a garantizar que su aplicación tendrá comportamiento consistente en la más amplia gama de dispositivos. Por ejemplo, el widget Barra de herramientas proporciona una experiencia de diseño de materiales en dispositivos con Android 2.1 (Nivel de API 7) o posterior, pero la barra de acciones nativa no admite material design a menos que el dispositivo ejecute Android 5.0 (nivel de API 21) o posterior.

Las instrucciones generales para agregar una barra de herramientas son

  1. Agregar la biblioteca de soporte v7 appcompat
  2. Haz que todas tus actividades se extiendan AppCompatActivity
  3. En el Manifiesto declara que quieres NoActionBar.
  4. Agregue un ToolBar al diseño xml de cada actividad.
  5. Obtener el ToolBar en cada actividad onCreate.

Vea las instrucciones de documentación para más detalles. Son bastante claros y útiles.

 51
Author: Suragch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-06 12:41:59

Para un nivel de API mínimo de 15, debería usar AppCompatActivity. Así, por ejemplo, su MainActivity se vería así:

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

Para usar AppCompatActivity, asegúrate de tener descargada la Biblioteca de soporte de Google (puedes comprobarlo en tus Herramientas -> Android -> SDK manager). Luego, solo incluye la dependencia de gradle en gradle de tu app.archivo de compilación:

compile 'com.android.support:appcompat-v7:22:2.0'

Puede usar este AppCompat como su Activity principal, que luego se puede usar para iniciar Fragmentos u otras Actividades (esto depende de qué tipo de aplicación estás construyendo).

El libro BigNerdRanch es un buen recurso, pero sí, está desactualizado. Léelo para obtener información general sobre cómo funciona Android, pero no esperes que las clases específicas que utilizan estén actualizadas.

 48
Author: adao7000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-22 09:13:52

Activity la clase es la clase básica. (El original) Es compatible con la gestión de fragmentos (Desde API 11). Ya no se recomienda su uso puro porque sus especializaciones son mucho mejores.

ActionBarActivity fue en un momento el reemplazo a la clase de Actividad porque hizo fácil manejar la barra de acción en una aplicación.

AppCompatActivity es el nuevo camino a seguir porque la barra de acción ya no se recomienda y debe usar Toolbar en su lugar (eso es actualmente la Barra de acción reemplazo). AppCompatActivity hereda de FragmentActivity, por lo que si necesita manejar Fragmentos, puede hacerlo (a través del Administrador de fragmentos). AppCompatActivity es para CUALQUIER API, no solo para mayores de 16 años (¿quién dijo eso?). Puedes usarlo agregando compile 'com.android.support:appcompat-v7:24:2.0' en tu archivo de Gradle. Lo uso en API 10 y funciona perfectamente.

 26
Author: Joaquin Iurchuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-04 23:27:51

Hay mucha confusión aquí, especialmente si lees fuentes obsoletas.

El básico es Activity, que puede mostrar Fragmentos. Puedes usar esta combinación si estás en la versión de Android > 4.

Sin embargo, también hay una biblioteca de soporte que abarca las otras clases que mencionó: FragmentActivity, ActionBarActivity y AppCompat. Originalmente se utilizaron para soportar fragmentos en versiones de Android

El último es AppCompat, los otros 2 son más antiguos. La estrategia que uso es usar siempre AppCompat, para que la aplicación esté lista en caso de backports de futuras versiones de Android.

 10
Author: flower_green,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-22 09:51:38

Dado que es probable que el nombre cambie en futuras versiones de Android (actualmente la última es AppCompatActivity pero probablemente cambiará en algún momento), creo que una buena cosa es tener una clase Activity que se extiende AppCompatActivity y luego todas sus actividades se extienden desde esa. Si mañana, cambian el nombre a AppCompatActivity2 por ejemplo, tendrá que cambiarlo solo en un lugar.

 3
Author: ExpensiveBelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-02 17:18:01

Si hablamos de Activity, AppcompactActivity, ActionBarActivity etc etc..

Necesitamos hablar de las clases Base que están extendiendo, primero tenemos que entender la jerarquía de las superclases.

Todas las cosas se inician desde el Contexto que es super clase para todas estas clases.

Context es una clase abstracta cuya implementación es proporcionada por el Sistema Android. Permite el acceso a aplicaciones específicas recursos y clases, así como up-calls para operaciones a nivel de aplicación como actividades de lanzamiento, intenciones de radiodifusión y recepción, etc

Context es seguido por o extendido por ContextWrapper

El ContextWrapper es una clase que extienda Contexto clase que simplemente delega todas sus llamadas a otro Contexto. Puede ser subclase a modificar el comportamiento sin cambiar el contexto original.

Ahora llegamos a Activity

El Actividad es una clase que extiende ContextThemeWrapper que es un única, cosa enfocada que el usuario puede hacer. Casi todas las actividades interactuar con el usuario, por lo que la clase de Actividad se encarga de crear un ventana para usted

Las clases siguientes están restringidas a extender, pero son extendidas por su descendiente internamente y proporcionan soporte para Api específicas

El SupportActivity es una clase que extiende la Actividad que es una clase base para componer juntos funcionalidad de compatibilidad

El BaseFragmentActivityApi14 es una clase que extiende SupportActivity es una clase base Es clase restringida pero se extiende por BaseFragmentActivityApi16 para mantener la funcionalidad de V14

El BaseFragmentActivityApi16 es una clase que se extiende BaseFragmentActivityApi14 que es una clase base para {@code FragmentActivity} para poder usar las API v16. Pero también es clase restringida, pero se extiende por FragmentActivity para soportar la funcionalidad de V16.

Ahora FragmentActivty

La FragmentActivity es una clase que se extiende BaseFragmentActivityApi16 y que quiere utilizar el soporte basado en Fragmento y Cargador API.

Al usar esta clase en lugar del soporte integrado de fragmentos y cargadores de new platform, debe usar el getSupportFragmentManager() y getSupportLoaderManager() métodos respectivamente para acceder a esas características.

ActionBarActivity es parte de la Biblioteca de Compatibilidad. Las bibliotecas de soporte se utilizan para ofrecer funciones más nuevas en plataformas más antiguas. Para ejemplo el ActionBar se introdujo en API 11 y es parte de la Actividad por defecto (dependiendo del tema en realidad). En contraste no hay ActionBar en las plataformas más antiguas. Así que el apoyo la biblioteca agrega una clase secundaria de Actividad ( ActionBarActivity ) que proporciona la funcionalidad de la barra de acción y la interfaz de usuario

En 2015 ActionBarActivity está obsoleto en la revisión 22.1.0 de la Biblioteca de soporte. AppCompatActivity debe usarse en su lugar.

La AppcompactActivity es una clase que se extiende FragmentActivity que es la clase base para las actividades que utilizan las características de la barra de acciones de la biblioteca de soporte.

Puede agregar un ActionBar a su actividad cuando se ejecuta en el nivel de API 7 o superior extendiendo esta clase para su actividad y configurando el tema de actividad a Theme.AppCompat o un tema similar

Aqui

Me refiero a estos dos una,dos

 2
Author: farhana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-24 12:40:33

AppCompatActivity extends FragmentActivity extends BaseFragmentActivityApi16 extends BaseFragmentActivityApi14 extends SupportActivity extends Activity

Así que La actividades más rápida que todas & AppCompatActivity es la mejor de todas.

 0
Author: Ahamadullah Saikat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-24 06:53:20