自动断开Goog​​leApiClient

时间:2016-08-04 04:46:34

标签: android google-api-client

我想为GoogleApiClient编写一个包装器,以便在活动的onDestroy方法中自动断开连接,如果它没有明确关闭的话。这样做的主要动机是忘记在使用Activity上下文创建的GoogleApiClient上调用disconnect()来避免内存泄漏。我想在整个应用程序中使用这个包装器。

我想知道是否有任何建议偏好或反对这种设计决策来创建自动关闭连接?

2 个答案:

答案 0 :(得分: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 +)

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

希望这很有帮助。干杯!

答案 1 :(得分:0)

只做:`

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

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

    mGoogleApiClient.disconnect();
}

定期而且不要忘记在mGoogleApiClient.disconnect()中包含onDestroy(),而不是onStart(),因为这不是Google实施的生命周期(或至少尝试建议,在您的情况下),您仍然需要在$(document).ready(function(){ $( "input[type=checkbox]" ).each(function(){ if($(this).is(':checked')) { var value = $(this).closest('tr').find($( "input[type=text]" )).val(); alert(value); } }); }); 上调用客户端连接。这个解决方案只需一行代码