2016-08-04 3 views
0

GoogleApiClientのラッパーを記述して、アクティビティのonDestroyメソッドが明示的に閉じられていないときに自動的に切断したいとします。これに対する主な動機は、アクティビティコンテキストを使用して作成したGoogleApiClientのdisconnect()に電話することを忘れて、メモリリークを回避することです。このラッパーをアプリケーション全体で使用したいと思います。GoogleApiClientを自動的に切断します

自動クローズ接続を作成するためのこの種の設計上の決定を支持する推奨事項があるかどうかを知りたかったですか?

答えて

0

ちょうど行います `

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

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

    mGoogleApiClient.disconnect(); 
} 
として定期的に

と、これは、Googleの実装(または少なくともお勧めしようとすることをライフサイクルではないとしてだけでonDestroy()にはない、そこmGoogleApiClient.disconnect()を含めることを忘れないでください、あなたの場合)、あなたはまだonStart()でクライアント接続を呼び出す必要があります。この解決策はコードの長さが1行だけです

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()を使うべきです。特に今のところ、ハニカムポストデバイス(API 11+)と呼ばれることがあるので、

これは役に立ちます。乾杯!

関連する問題