Избегайте утечки памяти с помощью WeakReference Android - PullRequest
0 голосов
/ 23 мая 2018

У меня есть этот пример кода ниже, и я хочу убедиться, что не будет памяти.Передача всей операции асинхронной задаче приведет к утечке памяти, если у самой задачи жизненный цикл будет больше, чем у активности.Но если я объявляю слабую ссылку, это означает, что если произойдет ротация, активность будет уничтожена без утечки памяти.Правильные ребята?Должен ли я также установить значение NULL?

Main .java

public class Main extends Activity {

  private TextView mMessageView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView();

    new Background(this /*getBaseContext()*/ ).execute();
  }
}

Background.java

 public class Background extends AsyncTask<String, Void, String>
{
    private WeakReference activity;

    public void Background(Activity act)
    {
          activity = new WeakReference(act);
    }

    @Override
    protected String doInBackground(String... params)
    {

    }

    @Override
    protected void onPostExecute(String result)
    {  
            if(activity.get()!=null)
            //ToDo
    }
}

1 Ответ

0 голосов
/ 23 мая 2018

Нет необходимости явного обнуления при использовании WeakReference.Что касается использования AsyncTask внутри Activity, просто будьте осторожны, чтобы не создавать анонимный экземпляр, потому что он будет иметь неявную ссылку на включающий класс, что может привести к утечкам памяти.

Код, который вы разместили, выглядит хорошо, не надоне забудьте завершить AsyncTask изящно, когда действие будет воссоздано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...