android logcat lifecycle

android - ¿Se llama al método onCreateView cuando? y cuantas veces en el ciclo de vida de la actividad?



logcat lifecycle (4)

Android Framework usa un mecanismo de inyección de dependencias Cuando el archivo de diseño está inflado. Creo que debido a esto, onCreateView se llama muchas veces. La fórmula para esto podría ser la siguiente:

  • no de vista en diseño xml == no de llamadas a onCreateView

Intente eliminar setContentView y vea cuántas veces se llama onCreateView. Es posible que obtenga alguna información al respecto.

Escribí un pequeño programa con este aspecto:

package com.example.lifecycle; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.AttributeSet; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class LifeLogger extends Activity { private String TAG = this.getClass().getName().toString(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_life_logger); Log.d(TAG,"onCreate event"); } @Override protected void onResume() { super.onResume(); Log.d(TAG,"onResume event"); } @Override protected void onPause() { super.onPause(); Log.d(TAG,"onPause event"); } @Override protected void onStop() { super.onStop(); Log.d(TAG,"onStop event"); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG,"onRestart event"); } @Override public View onCreateView(String name, Context context, AttributeSet attrs) { Log.d(TAG,"onCreateView event"); return super.onCreateView(name, context, attrs); } @Override protected void onStart() { super.onStart(); Log.d(TAG,"onStart event"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG,"onDestroy event"); } }

Cual es la actividad principal.

El LogCat es:

06-11 07: 07: 10.033: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.033: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06- 11 07: 07: 10.043: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.053: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07 : 07: 10.063: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.063: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07:07 : 10.063: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.063: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.073 : D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.073: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.083: D /com.example.lifecycle.LifeLogger(600): evento onCreateView 06-11 07: 07: 10.083: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.083: D / com .example.lifecy cle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.093: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.093: D / com.example.lifecycle. LifeLogger (600): evento onCreateView 06-11 07: 07: 10.093: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.103: D / com.example.lifecycle.LifeLogger ( 600): evento onCreateView 06-11 07: 07: 10.113: D / com.example.lifecycle.LifeLogger (600): evento onCreateView 06-11 07: 07: 10.113: D / com.example.lifecycle.LifeLogger (600) : evento onCreateView 06-11 07: 07: 10.113: D / com.example.lifecycle.LifeLogger (600): evento onCreate 06-11 07: 07: 10.113: D / com.example.lifecycle.LifeLogger (600): onStart evento 06-11 07: 07: 10.113: D / com.example.lifecycle.LifeLogger (600): onResume evento 06-11 07: 07: 10.193: D / com.example.lifecycle.LifeLogger (600): onCreateView event 06 -11 07: 07: 10.223: D / gralloc_goldfish (600): Se ha detectado un emulador sin emulación de GPU. 06-11 07: 08: 19.633: D / com.example.lifecycle.LifeLogger (600): evento onPause 06-11 07: 08: 20.213: D / com.example.lifecycle.LifeLogger (600): evento onStop 06- 11 07: 08: 31.993: D / com.example.lifecycle.LifeLogger (600): evento OnRestart 06-11 07: 08: 31.993: D / com.example.lifecycle.LifeLogger (600): onStart evento 06-11 07 : 08: 31.993: D / com.example.lifecycle.LifeLogger (600): evento onResume 06-11 07: 08: 51.073: D / com.example.lifecycle.LifeLogger (600): evento onPause 06-11 07:08 : 52.963: D / com.example.lifecycle.LifeLogger (600): evento onStop 06-11 07: 08: 54.043: D / com.example.lifecycle.LifeLogger (600): evento onDestroy

¿Lo que pasó aquí? ¿Por qué se llama onCreateView tantas veces?

¿Cuál es el tiempo de onCreateView?

Gracias.

actualizar:

el xml inflado:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${packageName}.${activityClass}" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>

el manifast

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lifecycle" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.lifecycle.LifeLogger" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Ejecutar en el nivel 16 de Android API


Has ampliado tu clase con Activity . Eso significa que el ciclo de vida de su clase sería el siguiente.

Por lo tanto, onCreateView no es un método de ciclo de vida para la actividad. Es solo un método miembro que se utilizará para tareas específicas como se indica en el documento.

Implementación estándar de android.view.LayoutInflater.Factory.onCreateView utilizada al inflar con el LayoutInflater devuelto por getSystemService. Esta implementación no hace nada y es para aplicaciones pre-android.os.Build.VERSION_CODES.HONEYCOMB. Las aplicaciones más nuevas deben usar onCreateView (View, String, Context, AttributeSet).

Confiar en la llamada de onCreateView () en una Actividad es una mala programación.

Si estuvieras usando Fragment extendido a tu clase y hayas escrito el método onCreateView (), habría sido llamado solo dos veces después de tu onAttach () y onDestroyView () si aún estuvieras en el mismo fragmento.

Vea este diagrama.

Aquí, es un método de ciclo de vida para Fragmento.

Entonces, estás probando con suposiciones erróneas. ¡Eso es todo!


Llamadas onCreateView = número de vistas en diseño (crear cada vista)


Puede monitorear la razón por la que OnCreateView se llama desde un archivo de registro:

Agregue dentro de su método onCreateView esto:

Log.d("TAG", "onCreateView event : " + name);

tal como mi logcat producir esto;

onCreateView : LinearLayout onCreateView : ViewStub onCreateView : FrameLayout onCreateView : android.support.v7.widget.ActionBarOverlayLayout onCreateView : android.support.v7.widget.ContentFrameLayout onCreateView : android.support.v7.widget.ActionBarContainer onCreateView : android.support.v7.widget.Toolbar onCreateView : android.support.v7.widget.ActionBarContextView onCreateView : LinearLayout