Se pierde memoria con GoogleApiClient detectado por Android Studio
He creado un nuevo proyecto con una clase y con el siguiente código tomado de este ejemplo: https://developers.google.com/app-indexing/android/publish#add-app-indexing-api-calls
Cuando roto el dispositivo varias veces y luego haga clic en Dump Java Heap en Android Studio y, a continuación, haga clic en Analyze. Voy a obtener un resultado que muestra que mi MainActivity se ha filtrado.
- Google Map Lite en CardView
- Android: Conjunto de cuentas Juego de luz
- ¿Debemos usar el proveedor de seguridad de google con OkHttp?
- Extraño accidente con los últimos servicios de Google Play
- Uses-sdk: minSdkVersion 7 no puede ser menor que la versión 9 declarada en la biblioteca
La razón por la que he creado este proyecto de ejemplo, es porque tengo una aplicación existente que tiene un problema de pérdida de memoria (StrictMode y Android Studio lo dice), y mi conclusión es que es mi código AppIndex que están causando el problema.
¿Es un error en Android Studio o es una pérdida de memoria real?
public class MainActivity extends AppCompatActivity { private GoogleApiClient mClient; private Uri mUrl; private String mTitle; private String mDescription; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); mUrl = Uri.parse("http://examplepetstore.com/dogs/standard-poodle"); mTitle = "Standard Poodle"; mDescription = "The Standard Poodle stands at least 18 inches at the withers"; } public Action getAction() { Thing object = new Thing.Builder() .setName(mTitle) .setDescription(mDescription) .setUrl(mUrl) .build(); return new Action.Builder(Action.TYPE_VIEW) .setObject(object) .setActionStatus(Action.STATUS_TYPE_COMPLETED) .build(); } @Override public void onStart() { super.onStart(); mClient.connect(); AppIndex.AppIndexApi.start(mClient, getAction()); } @Override public void onStop() { AppIndex.AppIndexApi.end(mClient, getAction()); mClient.disconnect(); super.onStop(); }
}
- Android "Not_Market_Managed" error
- ¿Cómo obtener el token de acceso después de que el usuario haya iniciado sesión desde Gmail en Android?
- GooglePlayServicesUtil: servicios de Google Play desactualizados. Requiere 5089000 pero fue encontrado 5077534
- Servicios de Google Play en Genymotion en Lollipop (Android 5.0)
- GoogleApiClient está lanzando "GoogleApiClient no está conectado todavía" DESPUÉS de onConnected función de llamar
- Google Play Services 9.2.0 clases perdidas
- No se puede resolver el símbolo 'LocationRequest' en el proyecto Android
- Android Wear y Google Fit: ¿Cómo forzar la actualización de datasets entre smartwatch y smartphone?
Parece que GoogleApiClient.Builder(this)
está causando la fuga, porque la actividad actual está siendo mantenida por el cliente de la API. mClient.disconnect()
no lo va a liberar. Lo he resuelto para mí mismo reemplazando "this" por getApplicationContext()
. El contexto de la aplicación vive mientras el proceso vive.
mClient = new GoogleApiClient.Builder(getApplicationContext()).addApi(AppIndex.API).build();