问题描述
在花费大量时间谷歌搜索后,我未能找到根本原因,因此解决了该问题。请在下面找到 LeakCanary 报告的泄漏的详细信息:
这是LeakCanary
报告的内存泄漏:
┬───
│ GC Root: System class
│
├─ android.app.OpApplicationPackageManagerInjector class
│ Leaking: NO (a class is never leaking)
│ ↓ static OpApplicationPackageManagerInjector.opIconPackHelper
│ ~~~~~~~~~~~~~~~~
├─ xne.xne.xne instance
│ Leaking: UNKNowN
│ Retaining 251 B in 7 objects
│ mContext instance of android.app.ContextImpl
│ ↓ xne.mContext
│ ~~~~~~~~
├─ android.app.ContextImpl instance
│ Leaking: UNKNowN
│ Retaining 5.1 kB in 61 objects
│ mAutofillClient instance of a.b.c.settings.SettingsActivity
│ with mDestroyed = true
│ mOuterContext instance of android.app.ContextImpl
│ ContextImpl.mOuterContext == ContextImpl.this: not tied to any particular
│ lifecycle
│ ↓ ContextImpl.mAutofillClient
│ ~~~~~~~~~~~~~~~
╰→ a.b.c.settings.SettingsActivity instance
Leaking: YES (ObjectWatcher was watching this because a.b.
c.settings.SettingsActivity received Activity#onDestroy()
callback and Activity#mDestroyed is true)
Retaining 118.0 kB in 2396 objects
key = 03a1e35f-6b30-43ad-8fdd-f1e639b84f65
watchDurationMillis = 5182
retainedDurationMillis = 182
mApplication instance of a.b.c.App
mBase instance of androidx.appcompat.view.ContextThemeWrapper
MetaDATA
Build.VERSION.SDK_INT: 29
Build.MANUFACTURER: OnePlus
LeakCanary version: 2.6
App process name: a.b.c
Count of retained yet cleared: 5 KeyedWeakReference instances
Stats: LruCache[maxSize=3000,hits=7082,misses=89380,hitRate=7%]
RandomAccess[bytes=4439965,reads=89380,travel=47383456311,range=25592742,size=31
984708]
Heap dump reason: 9 retained objects,app is visible
Analysis duration: 4531 ms
这是SettingsActivity
:
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.MaterialToolbar;
import a.b.c.R;
import a.b.c.common.navigation.NavHostFragmentActivity;
public class SettingsActivity extends NavHostFragmentActivity {
private static final String ACTION_LANGUAGE_CHANGED = "a.b.c.language.changed";
private MaterialToolbar toolbar;
public static Intent openIntent(Context context) {
return new Intent(context,SettingsActivity.class);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
toolbar = findViewById(R.id.toolbar);
}
public void onLanguageChanged() {
setResult(Activity.RESULT_OK,new Intent().setAction(ACTION_LANGUAGE_CHANGED));
finish();
}
public static boolean isLanguageChanged(int resultCode,@Nullable Intent data) {
return resultCode == Activity.RESULT_OK && data != null && ACTION_LANGUAGE_CHANGED.equals(data.getAction());
}
@Override
public int getNavigationGraphId() {
return R.navigation.nav_graph_settings;
}
@Override
protected int getContentView() {
return R.layout.activity_settings;
}
public MaterialToolbar getToolbar() {
return toolbar;
}
}
这是NavHostFragmentActivity
:
import android.os.Bundle;
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
import a.b.c.R;
import a.b.c.common.BaseActivity;
import javax.inject.Inject;
abstract public class NavHostFragmentActivity extends BaseActivity implements NavigationGraPHProvider {
@Inject
NavHostFragmentPresenter navHostFragmentPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
navHostFragmentPresenter.onCreate(this,this,getContentView(),savedInstanceState);
}
@LayoutRes
protected int getContentView() {
return R.layout.activity_nav_host_fragment;
}
}
这是NavHostFragmentPresenter
:
import android.os.Bundle;
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.fragment.NavHostFragment;
import a.b.c.R;
import javax.inject.Inject;
public class NavHostFragmentPresenter {
@Inject
NavHostFragmentPresenter() {
}
public void onCreate(AppCompatActivity activity,NavigationGraPHProvider navigationGraPHProvider,@Nullable Bundle savedInstanceState) {
onCreate(activity,navigationGraPHProvider,R.layout.activity_nav_host_fragment,savedInstanceState);
}
public void onCreate(AppCompatActivity activity,@LayoutRes int contentView,@Nullable Bundle savedInstanceState) {
activity.setContentView(contentView);
if (savedInstanceState == null) {
NavHostFragment fragment = NavHostFragment.create(navigationGraPHProvider.getNavigationGraphId());
activity.getSupportFragmentManager()
.beginTransaction()
.replace(R.id.nav_host_fragment,fragment)
.commit();
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)