Vengo de iOS donde es fácil y simplemente usas 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 Activitypara alojar mi FragmentActivities. Sin embargo, pensé que Activityestaba en desuso.
Entonces, para el nivel 22 de API (con un soporte mínimo para el nivel 15 o 16 de API), ¿qué debo usar exactamente para alojar los componentes y para los componentes mismos? ¿Hay usos para todos estos, o debería usar uno o dos casi exclusivamente?

FragmentActivityies. Usted solo alojaFragments. En las versiones más recientes de Android, laActivityclase en sí se ha actualizado para alojarlas directamente. Para admitir versiones anterioresFragmentActivityse introdujo.Activityadmitió unaActionBar. Esto fue compatible con versiones anteriores hasta laActionBarActivityprimera, que ahora ha quedado en desuso y reemplazado porAppCompatActivity. Dado que ambas clases se extienden,FragmentActivitytambién admitenFragments de alojamiento .Respuestas:
No.
ActivityEs la línea de base. Toda actividad heredaActivity, directa o indirectamente.FragmentActivityes para usar con el backport de fragmentos encontrados en las bibliotecassupport-v4ysupport-v13. La implementación nativa de fragmentos se agregó en el Nivel de API 11, que es inferior a losminSdkVersionvalores propuestos . La única razón por la que debería considerarFragmentActivityespecíficamente es si desea usar fragmentos anidados (un fragmento que contiene otro fragmento), ya que eso no se admitió en fragmentos nativos hasta el nivel 17 de API.AppCompatActivityEs de laappcompat-v7biblioteca. Principalmente, esto ofrece un backport de la barra de acción. Dado que la barra de acción nativa se agregó en el API Nivel 11, no es necesarioAppCompatActivitypara eso. Sin embargo, las versiones actualesappcompat-v7también agregan un backport limitado de la estética de Material Design, en términos de la barra de acción y varios widgets. Hay ventajas y desventajas de usarappcompat-v7, mucho más allá del alcance de esta respuesta específica de desbordamiento de pila.ActionBarActivityes el nombre antiguo de la actividad base deappcompat-v7. Por varias razones, querían cambiar el nombre. A menos que algún biblioteca de terceros que está utilizando insiste en unaActionBarActivity, se debe preferirAppCompatActivitymásActionBarActivity.Entonces, dado su
minSdkVersionrango de 15-16:Si desea el aspecto de diseño de material con soporte, use
AppCompatActivitySi no, pero desea fragmentos anidados, use
FragmentActivitySi no, use
ActivitySimplemente agregando desde el comentario como nota: se
AppCompatActivityextiendeFragmentActivity, por lo que cualquiera que necesite usar funciones deFragmentActivitypuede usarAppCompatActivity.fuente
FragmentActivityes un antepasado deAppCompatActivity. Si bien no recomiendo usar fragmentos anidados, en la medida en que los fragmentos anidados funcionen,AppCompatActivityadmitirán fragmentos anidados.Activitymayor parte de lo último sin, porsupport-v7ejemplo, diseño de material no soportado? Mi objetivo es min 19 objetivo 25Theme.Material, necesitasminSdkVersion21 o más.Activityes la clase base de todas las demás actividades, no creo que sea obsoleto. La relación entre ellos es:Activity<-FragmentActivity<-AppCompatActivity<-ActionBarActivity'<-' significa herencia aquí. La referencia que se dice
ActionBarActivityestá en desuso, úsela en suAppCompatActivitylugar.Básicamente, usar
AppCompatActivityes siempre la elección correcta. Las diferencias entre ellos son:ActivityEs el básico.Activity,FragmentActivityproporciona la capacidad de usoFragment.FragmentActivity,AppCompatActivityproporciona características paraActionBar.fuente
2019: uso
AppCompatActivityEn el momento de escribir esto (verifique el enlace para confirmar que todavía es cierto), la Documentación de Android recomienda usar
AppCompatActivitysi está utilizando una barra de aplicaciones.Este es el racional dado:
Las instrucciones generales para agregar una barra de herramientas son
AppCompatActivityNoActionBar.ToolBardiseño xml de cada actividad.ToolBaren cada actividadonCreate.Consulte las instrucciones de la documentación para más detalles. Son bastante claros y útiles.
fuente
Para un nivel mínimo de API de 15, querrás usar
AppCompatActivity. Entonces, por ejemplo,MainActivityse vería así:Para usarlo
AppCompatActivity, asegúrese de tener descargada la Biblioteca de soporte de Google (puede verificar esto en Herramientas -> Android -> Administrador de SDK). Luego solo incluya la dependencia de gradle en el archivo gradle.build de su aplicación:Puede usar esto
AppCompatcomo su principalActivity, que luego se puede usar para iniciar Fragmentos u otras Actividades (esto depende del tipo de aplicación que esté creando).El libro BigNerdRanch es un buen recurso, pero sí, está desactualizado. Léalo para obtener información general sobre cómo funciona Android, pero no espere que las clases específicas que usan estén actualizadas.
fuente
ActivityLa 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.ActionBarActivityfue en un momento el reemplazo de la clase Actividad porque facilitó el manejo de ActionBar en una aplicación.AppCompatActivityes la nueva forma de hacerlo porque ya no se recomienda la ActionBar y en su lugar deberías usar Toolbar (que actualmente es el reemplazo de ActionBar). 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?). Puede usarlo agregandocompile 'com.android.support:appcompat-v7:24:2.0'su archivo Gradle. Lo uso en API 10 y funciona perfecto.fuente
Toolbar.Aquí hay mucha confusión, especialmente si lees fuentes obsoletas.
El básico es
Activity, que puede mostrar Fragmentos. Puede usar esta combinación si está en la versión de Android> 4.Sin embargo, también hay una biblioteca de soporte que abarca las otras clases que usted ha mencionado:
FragmentActivity,ActionBarActivityyAppCompat. Originalmente se usaban para admitir fragmentos en versiones de Android <4, pero en realidad también se usan para respaldar la funcionalidad de versiones más recientes de Android (diseño de materiales, por ejemplo).El último es
AppCompat, los otros 2 son mayores. La estrategia que uso es usar siempreAppCompat, para que la aplicación esté lista en caso de backports de futuras versiones de Android.fuente
Si se habla de
Activity,AppcompactActivity,ActionBarActivityetc, etc ..Necesitamos hablar sobre las clases Base que están extendiendo. Primero tenemos que entender la jerarquía de las superclases.
Todas las cosas se inician desde Context, que es una superclase para todas estas clases.
Contextes seguido o extendido porContextWrapperAhora llegamos a
ActivityLas clases a continuación están restringidas para extenderse, pero su descendente las extiende internamente y brindan soporte para Api específicas
ahora FragmentActivty
Al usar esta clase en lugar de la compatibilidad con el cargador y los fragmentos integrados de la nueva plataforma, debe usar los métodos
getSupportFragmentManager()ygetSupportLoaderManager()respectivamente para acceder a esas funciones.En 2015, ActionBarActivity está en desuso en la revisión 22.1.0 de la Biblioteca de soporte. AppCompatActivity debería usarse en su lugar.
Puede agregar una barra de acción 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.AppCompatun tema similarMe refiero a estos dos uno , dos
fuente
Dado que es probable que el nombre cambie en futuras versiones de Android (actualmente la última es,
AppCompatActivitypero probablemente cambiará en algún momento), creo que es bueno tener una claseActivityque se extiendaAppCompatActivityy luego todas sus actividades se extenderán desde esa. Si mañana cambian el nombre,AppCompatActivity2por ejemplo, tendrá que cambiarlo en un solo lugar.fuente
AppCompatActivity extiende FragmentActivity extiende BaseFragmentActivityApi16 extiende BaseFragmentActivityApi14 extiende SupportActivity extiende Actividad
Entonces, Activity es más rápido que todos y AppCompatActivity es lo mejor de todo.
fuente