gpt4 book ai didi

android - Android Studio 检测到 GoogleApiClient 的内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:07 24 4
gpt4 key购买 nike

我创建了一个包含一个类的新项目,并使用了从该示例中获取的以下代码: https://developers.google.com/app-indexing/android/publish#add-app-indexing-api-calls

当我多次旋转设备,然后在 Android Studio 中单击 Dump Java Heap,然后单击 Analyse。我将得到一个结果,表明我的 MainActivity 已泄漏。

我之所以创建这个示例项目,是因为我有一个存在内存泄漏问题的现有应用程序(StrictMode 和 Android Studio 是这样说的),我的结论是我的 AppIndex 代码导致了这个问题.

是Android Studio的bug还是真正的内存泄漏?

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

最佳答案

似乎 GoogleApiClient.Builder(this) 导致了泄漏,因为 API 客户端正在保留当前 Activity 。 mClient.disconnect() 不会释放它。我已经通过用 getApplicationContext() 替换“this”自行解决了这个问题。只要进程存在,应用程序上下文就会存在。

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

关于android - Android Studio 检测到 GoogleApiClient 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35308231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com