MemoryLeak 在使用 InstantSearch-Android 时出现



当我使用InstantSearch Android时,出现了内存泄漏。

请参阅以下泄漏内存的MainActivity... hprof表明这是com.algolia.instantsearch.ui.views.Hits的问题。有谁知道当Activity被摧毁时如何摧毁该视图?

public class MainActivity extends AppCompatActivity {
    private Searcher searcher;
    InstantSearch helper;
    Hits hits;
    LinearLayout activity_main;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hits= (Hits) findViewById(R.id.hits);
        activity_main= (LinearLayout) findViewById(R.id.activity_main);
        searcher = Searcher.create("app_id","secret_key","Items");
        helper = new InstantSearch(this, searcher);
        helper.search();
    }
    @Override
    protected void onDestroy() {
        searcher=null;
        helper=null;
        hits.clear();
        hits.removeAllViewsInLayout();
        hits.removeAllViews();
        hits.destroyDrawingCache();
        hits.setBackground(null);
        hits.setBackgroundResource(0);
        hits=null;
        activity_main.removeAllViewsInLayout();
        activity_main.removeAllViews();
        activity_main.destroyDrawingCache();
        activity_main.setBackground(null);
        activity_main.setBackgroundResource(0);
        activity_main=null;
        Log.i("AppInfo","Destroy");
        super.onDestroy();
    }
}

这是我activity_main.xml

<LinearLayout
android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white"
xmlns:algolia="http://schemas.android.com/apk/res-auto">

<com.algolia.instantsearch.ui.views.Hits
    android:id="@+id/hits"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    algolia:itemLayout="@layout/hits_item"
    algolia:autoHideKeyboard="true"
    algolia:hitsPerPage="20"/>

这是我的hits_item.xml

<layout xmlns:algolia="http://schemas.android.com/apk/res-auto">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/profImg"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:src="@drawable/placeholder_video"
            algolia:attribute='@{"profilePic"}'/>
    <TextView
        android:id="@+id/hit_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        algolia:attribute='@{"name"}'
        algolia:highlighted='@{true}'/>
 </RelativeLayout>

我们只是发布一个修复程序。如果更新到 1.1.4,现在可以解决此问题。只需使用以下代码添加活动onDestroy

@Override
protected void onDestroy() {
    // ... your code ...
    searcher.destroy(); // This will clean and release different listeners 
    super.onDestroy();
}

你可以在这里看到它

最新更新