小编Chr*_*r A的帖子

Android:EditText导致内存泄漏

我想首先说这是我第一次处理性能,因为这是我第一次开发Android应用程序.

该应用程序

该应用程序是一个源代码编辑器,您可以在其中打开文件,修改它们并将其保存回来.该应用程序由4部分组成:

  • 导航器视图:包含打开文件的ListView和打开文件夹的TreeView.
  • 代码视图容器:这包含包含实际代码的视图.
  • 代码容器:这是一个包含文本视图和自定义EditText的小视图(由我扩展EditText类创建,但它尚未实现,因此它的行为与EditText完全相同).TextView只显示代码行.
  • 打开和保存片段:我使用了两个片段作为DialogFragment:保存片段允许您导航本地文件系统以及链接帐户的Dropbox文件系统并保存当前文件.open片段允许您导航相同的文件系统并打开文件.

问题

完成基本代码编辑器后,我转到语法高亮.现在,我想明确表示即使没有语法突出显示也会产生泄漏,所以这不是问题所在.

无论如何,通过测试语法highlithing,我打开"大"文件(1200行代码),我注意到应用程序变得非常慢,这是显而易见的,因为我正在整理整个文本(我将通过仅突出显示来避免这种情况)可见的文字).这促使我测试应用程序没有语法高度大文件,我发现应用程序变得有点慢,我发现一些内存泄漏发生.

特别是,当我打开一个大文件(1200行代码)时,应用程序需要1秒钟才能在textview中显示代码行,当我输入字符的绘图时速度很慢.此外,每当我键入删除字符时,都会发生内存泄漏.

检验

我试图检查堆(使用MAT),但正如我所说,我没有任何经验,我不知道如何调查这个问题.对不起,我无法上传截图(没有stackoverflow的权限),但我可以报告一些数字:

打开大文件之前的系统

系统总览

在此输入图像描述

泄密嫌疑人

在此输入图像描述

问题1 在此输入图像描述

细节: 在此输入图像描述

问题2 在此输入图像描述

问题3 在此输入图像描述

最大的顶级支配者套餐

在此输入图像描述 在此输入图像描述

最大的对象

在此输入图像描述

打开大文件后的系统

系统总览

在此输入图像描述

泄密嫌疑人:

在此输入图像描述

问题1: 在此输入图像描述 细节: 在此输入图像描述

问题2: 在此输入图像描述

问题3问题4 在此输入图像描述

最大的顶级支配者套餐

在此输入图像描述 在此输入图像描述

最大的对象

在此输入图像描述

从Android设备监视器:

打开大文件之前的系统

在此输入图像描述

打开大文件后的系统

在此输入图像描述

分配的一些部分:

在此输入图像描述 在此输入图像描述 在此输入图像描述 先感谢您

编辑:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/codeScrollView"
android:fillViewport="true">

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="@drawable/lines_stroke"
        android:textColor="@android:color/white"
        android:text="@string/first_line"
        android:textSize="15dp"
        android:gravity="right"
        android:paddingLeft="15dp"
        android:paddingRight="5dp"
        android:id="@+id/edit_code_lines_view"/>

              <com.example.green.bachelorproject.customViews.codeEditView.TouchEditText
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/code_stroke"
        android:gravity="top"
        android:textColor="@android:color/white"
        android:textSize="15dp"
        android:paddingLeft="3dp"
        android:paddingRight="3dp"
        android:textCursorDrawable="@color/white"
        android:id="@+id/edit_code_content_view"/>

    </LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

编辑

好的,我发现了这个问题.如果你看到,每次输入内容时,我都会更新EditText行,因为文本很长(1200行),所以需要一段时间来重新计算它.事情虽然关于那个!我必须找到一种更快的方式来显示代码行.一种选择是为每一行使用一个TextView,这样我只更新需要更改的TextView.但我不知道是否有1200个TextView对象是好的.

    package com.example.green.bachelorproject.customViews.codeEditView; …

java android memory-leaks

10
推荐指数
1
解决办法
2771
查看次数

标签 统计

android ×1

java ×1

memory-leaks ×1