使用InstantSearch时出现MemoryLeak-Android
MemoryLeak appears when using 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,您现在可以解决这个问题。只需添加您的 activity 的 onDestroy
以下代码:
@Override
protected void onDestroy() {
// ... your code ...
searcher.destroy(); // This will clean and release different listeners
super.onDestroy();
}
可以看到here
当我使用 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,您现在可以解决这个问题。只需添加您的 activity 的 onDestroy
以下代码:
@Override
protected void onDestroy() {
// ... your code ...
searcher.destroy(); // This will clean and release different listeners
super.onDestroy();
}
可以看到here