Передача контекста через статический класс эффективна или нет? - PullRequest
1 голос
/ 10 мая 2011

В Android мне нужно ссылаться на «контекст» или сказать «контекст» нескольким классам.Для этой цели я реализовал статический класс, который содержит «контекст» и все остальные контексты доступа к классам через него.

//let's say I have a static class DataHolder 
//and my main acitivity i.e. whose context need to be refrenced

 public class DataHolder{
        public static Context context;
    }

public class MainActivity extends Activity{
    public void onCreate(Bundle bundle){
     DataHolder.context = getApplicationContext();
   }
}

Итак, можно ли реализовать этот процесс или это неправильный способссылка в приложении Android.

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Проблема здесь не в эффективности, а в неотъемлемых рисках статического хранения вашего контекста.

Контекст может изменяться во многих событиях, наиболее вероятным из которых является изменение ориентации устройства, поэтому не следует ретранслировать его всегда.Я думаю, что вы должны передать Context в конструкторе каждому классу, который, по вашему мнению, будет его использовать (или, скорее, перепроектировать свой код, чтобы он вам не понадобился там, где он недоступен, хотя это может быть немного сложно).

В худшем случае вы должны стараться обновлять его как можно чаще.Но опять же, какой смысл в том, чтобы он всегда был доступен?Я думаю, что риск не стоит лени (извините, если это звучит грубо, я не это имею в виду) создания тщательного дизайна приложения.

0 голосов
/ 10 мая 2011

Вы должны определенно избегать этого, так как это может привести к утечке памяти. Читать: Предотвращение утечек памяти

Это означает, что представления имеют ссылку на всю деятельность и, следовательно, на все, что ваша деятельность удерживает; обычно вся иерархия View и все ее ресурсы. Следовательно, если вы пропускаете контекст («утечка» означает, что вы сохраняете ссылку на него, предотвращая сбор GC), вы теряете много памяти. Утечка всей активности может быть очень легкой, если вы не будете осторожны

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