2016-08-04 2 views
0

Я хочу написать обертку для GoogleApiClient, чтобы автоматически отключить метод onDestroy, если он явно не закрыт. Основная мотивация для этого - избежать утечек памяти, забыв позвонить disconnect() в GoogleApiClient, созданном с использованием контекста Activity. Я хотел бы использовать эту оболочку во всем приложении.Автоматически отключить GoogleApiClient

Я хотел бы знать, есть ли какая-либо рекомендация, одобряющая или предлагающая такое решение для создания автоматических замыканий?

ответ

0

Вобще: `

@Override 
protected void onPause() { 
    super.onPause(); 

    // Your application logic 
    // ... 
    // ... 

    mGoogleApiClient.disconnect(); 
} 

, как регулярно и только не забудьте включить mGoogleApiClient.disconnect() в там, а не на onDestroy(), поскольку это не жизненный цикл, что Google реализует (или по крайней мере пытается рекомендовать , в вашем случае), вам все равно необходимо вызвать клиентское соединение на onStart(). Это решение является только одной строкой кода

3

Существует ответ, но это не лучшее решение, и оно не отвечает на вопрос напрямую. Вопрос состоял в том, как автоматически управлять GoogleApiClient. Для этого есть опция enableAutoManage().

Документация: https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.Builder

Вы можете включить это, выполнив следующие действия:

mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this, this) //auto manage disconnecting client 
      .addConnectionCallbacks(this) 
      .addApi(LocationServices.API) 
      .build(); 

Кроме того, OnPause() не самое лучшее место, чтобы отключить клиента. Вы должны использовать onStop(). Особенно сейчас, так как это guarenteed называть устройствами поста-Соты (API 11 +)

@Override 
protected void onStop() { 
    super.onStop(); 
    // stop GoogleApiClient 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
} 

Надеется, что это полезно. Ура!

Смежные вопросы