Android内存泄漏碎片

时间:2018-03-27 13:07:49

标签: android android-fragments memory-leaks

所以我开发了一个简单的应用程序作为独立资格的一部分,它工作得很好,所以我发布它并将apk上传到Play商店。我可以从Play商店下载的工作正常,一切都很好。

我大约一周左右回到我的项目文件,为我的应用程序添加更新,并在运行它(没有做出任何更改)时,我现在得到了内存泄漏的内容。

之前没有发生这种情况,在恢复到我的应用程序的旧版本时,他们现在都表现出这个问题。

当使用默认的Android导航栏模板在片段之间切换(我总共有三个,其中一个只有一个文本视图,没有代码)时,它们似乎闪烁 - 过渡不像我的最终那样无缝和平滑apk从Play商店下载。

另外,在logcats中,当我在片段之间切换时,我发现以下消息:

MinWidth

当我继续这样做时,这会重复,并且探查器中的内存使用量也会增加。

偶尔也会看到这条消息:

I/zygote64: After code cache collection, code=122KB, data=92KB
I/zygote64: Increasing code cache capacity to 512KB

我对Android开发非常陌生,但据我所知,这似乎是内存泄漏。

我觉得很奇怪,我的应用程序不再有用,但我的apk文件仍能完美运行。我在我的Android手机上运行了一切,最近更新到奥利奥(这可能是原因)吗?

希望知道Android内存泄漏原因的人可以帮助我。

我很高兴提供代码,但总结一下,我的应用程序非常简单,包含3个片段,其中一个包含一个RecyclerView连接到一个SQLite数据库,另一个有两个按钮和一个ImageView。 / p>

这个项目将在两周内完成,这个问题在回到开发阶段后让我脱掉头发!

感谢。

根据要求,这是我的代码,用于根据选择的navmenu项目打开片段(这位于MainActivity中)

I/zygote64: Compiler allocated 4MB to compile void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int)
I/zygote64: Compiler allocated 8MB to compile void android.widget.TextView.<init>(android.content.Context, android.util.AttributeSet, int, int)

这是我的代码片段,其中包含RecyclerView,以及对我的SQLite数据库的引用。此外,有一个工厂开启了一项新的活动,但我觉得这不会引起任何问题,因为闪烁和内存增加纯粹是在3个片段之间切换时。

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {

        Fragment fragment = null;
        String title = "";

        int id = item.getItemId();

        if (id == R.id.nav_tasks) {
            fragment = new TaskFragment();
            title = "Tasks";
        } else if (id == R.id.nav_alarm) {
            fragment = new AlarmFragment();
            title = "Alarms";
        } else if (id == R.id.nav_settings) {
            fragment = new SettingsFragment();
            title = "Settings";
        }

        if(fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction ft = fragmentManager.beginTransaction();

            ft.replace(R.id.screen_area, fragment);
            ft.commit();

            getSupportActionBar().setTitle(title);

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

0 个答案:

没有答案