Я создал приложение, которое запрашивает предпочтительный язык пользователя в Loginfragment
. Мне нужно убить и перезапустить приложение после установки языка. Я попытался использовать воссоздание, но это приводит к следующей ошибке
android.view.WindowLeaked: Activity xxx.presentation.activity.MainActivity has leaked window DecorView@aea6bb8[MainActivity] that was originally added here
Мой LoginFragment
выглядит следующим образом:
public class LoginFragment extends Fragment implements View.OnClickListener,LoginView{
//Some code
private void setListeners(View view) {
//Some code
view.findViewById(R.id.change_lang_btn).setOnClickListener(this);
}
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.change_lang_btn:
Log.v("LOGIN","Change Language button clicked");
GeneralUtils.setupAppLanguageDialog(getActivity());
getActivity().recreate(); //Creates memory leak
break;
}
}
Мой класс GeneralUtils
, который содержит диалоговое окно смены языка, выглядит так:
public class GeneralUtils {
//Some code
public static void setupAppLanguageDialog(Context context)
{
AlertDialog langChangeDialog;
CharSequence[] changeLangList = {"English", "हिन्दी"};
AlertDialog.Builder mBuilder = new AlertDialog.Builder(context);
mBuilder.setTitle("Choose language");
mBuilder.setSingleChoiceItems(changeLangList, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (i==0)
{
DataRepository.setLocale("en", ((ContextWrapper)context).getBaseContext());
}
else
{
DataRepository.setLocale("hi",((ContextWrapper)context).getBaseContext());
}
dialogInterface.dismiss();
Toast.makeText(context, context.getString(R.string.Language_change_done),Toast.LENGTH_LONG).show();
}
});
langChangeDialog =mBuilder.create();
langChangeDialog.show();
}
}
Функция SetLocale
выполняет необходимые настройки и обновляет общие настройки для изменения языка. Как мне решить проблему с утечкой памяти, если я воссоздаю приложение? В чем причина? Есть ли лучший подход? Приветствуются любые предложения по созданию/улучшению функциональности.
Изменить: я проверил соответствующий ответ на наличие утечек памяти, но Мне нужно понять, как использовать его в моем сценарии.