Подтвердить что ты не робот

Утечка памяти с помощью GoogleApiClient, обнаруженная Android Studio

Я создал новый проект с одним классом и со следующим кодом, взятым из этого примера: https://developers.google.com/app-indexing/android/publish#add-app-indexing-api-calls

Когда я поворачиваю устройство несколько раз, а затем нажмите "Дамп Java-кучи" в Android Studio, а затем нажмите "Анализ". Я получу результат, показывающий, что моя MainActivity просочилась.

Причина, по которой я создал этот примерный проект, заключается в том, что у меня есть существующее приложение с проблемой утечки памяти (StrictMode и Android Studio так говорит), и я пришел к выводу, что это мой код AppIndex, который вызывает проблему.

Это ошибка в Android Studio или это настоящая утечка памяти?

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();
}

}

4b9b3361

Ответ 1

Кажется, что GoogleApiClient.Builder(this) вызывает утечку, поскольку текущая активность поддерживается клиентом API. mClient.disconnect() не собирается выпускать его. Я решил это для себя, заменив "this" на getApplicationContext(). Контекст приложения работает до тех пор, пока процесс жизни не работает.

mClient = new GoogleApiClient.Builder(getApplicationContext()).addApi(AppIndex.API).build();