Я отслеживаю утечку памяти в своем приложении для Android, и этот EditText использует много памяти (2,8 МБ), и его отключение устраняет утечку.
Так может ли кто-нибудь обнаружить (потенциальную) утечку памяти в этом коде? Я нахожу немного проблематичным тот факт, что я никогда не возвращаю true из OnEditorActionListener, поскольку я заменяю фрагмент раньше (или возврат все еще будет вызываться? Я должен выполнить код и проверить это).
Кроме того, может быть, я не закрываю редактор должным образом, просто прячу его?
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;
}
});
}