Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android EditText和OnEditorActionListener-内存泄漏_Android_Memory Leaks_Android Edittext_Android Memory - Fatal编程技术网

Android EditText和OnEditorActionListener-内存泄漏

Android EditText和OnEditorActionListener-内存泄漏,android,memory-leaks,android-edittext,android-memory,Android,Memory Leaks,Android Edittext,Android Memory,我正在追踪Android应用程序中的内存泄漏,此EditText使用了大量内存(2.8MB),禁用它会使泄漏消失 那么,有人能在这段代码中发现一个(潜在的)内存漏洞吗? 我发现有点问题,我从未从OnEditorActionListener返回true,因为我之前替换了片段(或者返回值仍然会被调用?我应该逐步检查代码并检查) 还有,也许我没有正确关闭编辑器,只是把它藏起来了 public void addHighscoreEdittext() { final HighscoresD

我正在追踪Android应用程序中的内存泄漏,此EditText使用了大量内存(2.8MB),禁用它会使泄漏消失

那么,有人能在这段代码中发现一个(潜在的)内存漏洞吗? 我发现有点问题,我从未从OnEditorActionListener返回true,因为我之前替换了片段(或者返回值仍然会被调用?我应该逐步检查代码并检查)

还有,也许我没有正确关闭编辑器,只是把它藏起来了

 public void addHighscoreEdittext()
{   
    final HighscoresDatabaseHandler dbHandler = ( (MainActivity) getActivity() ).theDatabasehandler;

    HighscoreEdittext = new EditText( getActivity() );
    HighscoreEdittext.setX( ( actualScreenSizeX - actualScreenSizeX / 8 * 6 ) / 2 );
    HighscoreEdittext.setY( actualScreenSizeY / 10 * 3 );

    LayoutParams lparams = new LayoutParams( actualScreenSizeX / 8 * 6, actualScreenSizeY / 6 );
    HighscoreEdittext.setLayoutParams( lparams );
    HighscoreEdittext.setInputType( InputType.TYPE_CLASS_TEXT );

    HighscoreEdittext.setBackground( getResources().getDrawable( R.layout.start_finish_button ) );

    HighscoreEdittext.setTextColor( Constants.TEXT_COLOR_ON_TRANSPARENT_BROWN );
    HighscoreEdittext.setHintTextColor( Constants.TEXT_COLOR_ON_TRANSPARENT_BROWN );
    HighscoreEdittext.setHint( "New best time! Enter name..." );

    ((ViewGroup) (getActivity()).findViewById( android.R.id.content )).addView( HighscoreEdittext );

    HighscoreEdittext.setOnEditorActionListener(
        new EditText.OnEditorActionListener() 
        {
            @Override
            public boolean onEditorAction( TextView v, int actionId, KeyEvent event ) 
            {                   
                if ( actionId == EditorInfo.IME_ACTION_DONE )
                {
                    SharedData.GameFinished = false;

                    String name = v.getText().toString();
                    if ( name.length() > 8 )
                    {
                        name = name.substring( 0, 8 );
                    }
                    dbHandler.updateHighscore(
                            new Highscore(
                                    SharedData.LevelPlayed, 
                                    name, 
                                    SharedData.LevelTime ) ); 

                    /* Hide keyboard */
                    HighscoreEdittext.clearFocus();
                    InputMethodManager in = (InputMethodManager) getActivity().getSystemService( Context.INPUT_METHOD_SERVICE );
                    in.hideSoftInputFromWindow( HighscoreEdittext.getApplicationWindowToken(), 
                            InputMethodManager.HIDE_NOT_ALWAYS );

                    ((ViewGroup) getActivity().findViewById( android.R.id.content )).removeView( HighscoreEdittext );

                    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace( R.id.fragment_content, new ChooseLevelFragment(), "chooselevel" );
                    fragmentTransaction.commit();

                    return true;              
                }

                return false;
            }
    });
      }

其中有fragmentTransaction.commit()。这可能是一个问题,因为提交是一个同步任务,将导致应用程序等待它。如果不需要数据,请查看是否可以使用异步任务