2016-03-05 3 views
1

Мне нужно иметь ссылку на контекст в моем классе utils.Android - статический контекст

Сначала я простирающийся класс Application и инициализация моего UTIL класса:

public class MyApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Utils.init(getApplicationContext()); 
    } 
} 

И Utils класс выглядит следующим образом:

public class Utils{ 

    private static Context sContext; 

    private Utils() { 
    } 

    public static void init(Context context) { 
     sContext = context; 
    } 
} 

Есть любые возможного способа получить утечку с таким подходом ?

Я вижу только один случай: когда приложение переходит в фоновый режим - контекст может быть воссоздан, и поэтому класс Utils может быть повторно инициализирован, даже если он будет сохраняться в памяти.

Любые предложения, пожалуйста.

+0

Да, это может привести к утечке памяти, когда ориентация экрана меняется .. Можете ли вы сказать мне, почему вы должны удерживать контекст как собственное поле класса Utils? – Bhargav

+0

Это было просто теоретическое, конечно. Но теперь, как изменения ориентации влияют на эти классы? Нет никаких ссылок на действия. –

+0

Я предполагаю, что до тех пор, пока вы передаете в applicationContext методы init, это прекрасно, но для того, чтобы вы сохраняли только контекст приложения в своем классе 'Utils', вам нужно сделать это в методе init' sContext = context. getApplicationContext(); ' – Bhargav

ответ

1

Вы должны решить следующим образом:

public class YourClass extends Application { 

     private static Context context; 

     public void onCreate() 
     { 
      super.onCreate(); 
      YourClass.context = getApplicationContext(); 
     } 

     public static Context getAppContext() { 
      return YourClass.context; 
     } 
    } 

Как использовать:

YourClass.getAppContext(); 
+0

Да, это известный подход. Но вопрос был немного глубже - есть ли возможность утечки при ссылках, например, там? –

+0

Я думаю, что ваше решение не должно быть проблемой, потому что статический метод загружается и выгружается мгновенно, и у вас не должно быть проблем с утечкой памяти. Во всяком случае, он считает, что ваш код похож на мое решение. – user3449772

+0

Конечно, в нормальной ситуации я бы использовал ваш подход. Но не все ситуации идут по пути, которые мы хотим –

Смежные вопросы