2017-01-11 5 views
2

Привет, я использую шаблон MVP в своем приложении для Android. У меня есть некоторый статический метод в классе приложения, который проверяет статус подключения.Это хорошая идея использовать статическую переменную в презентаторе, которая объявлена ​​в моем классе приложения

public class AppModule extends Application { 

    public static boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager 
       = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 
} 

Я использую этот статический метод уровня приложения в презентаторе для проверки подключения к Интернету.

public class ActivityWallPresenter { 

private CreatrixTestCall creatrixTestCall; 

@Inject 
public ActivityWallPresenter(CreatrixTestCall creatrixTestCall) { 
    this.creatrixTestCall = creatrixTestCall; 
} 

public void loadPosts(ActivityWallFragmentContract activityWallFragment) { 
    this.fragmentContract = activityWallFragment; 
    if (AppModule.isNetworkAvailable()) { 
     fragmentContract.showProgress(); 
     callWeb(); 
    } else { 
     fragmentContract.onNetworkDisconnected(); 
    } 
} 

Это хорошая идея вызвать статический метод? предложите мне другой подход, если нет.

+1

Хотя это просто статический метод, вы можете разместить его здесь, но хорошая методика кодирования заключается в том, чтобы поместить его в отдельный класс, который может быть utils.java или globalMethods.java или любым вашим выбором. –

+1

Зависит от того, что вы определяете как «хорошую идею». Пока вы не назначаете какие-либо переменные статическим членам, я не думаю, что там много вреда. Однако я вижу, что вы используете переменную 'context' в этой статической функции. Если это экземпляр «Activity», этот объект никогда не будет собираться в мусор, вызвав утечку памяти (вид) – 0xDEADC0DE

+1

Это зависит от допущений, которые вы можете внести в свой код. Если вы хотите использовать истинный подход ООП, вам необходимо создать класс, который проверяет подключение по заданному контексту, а затем вводит его в презентаторе. Но если вы можете иметь процедуры в своем коде, то статический метод - лучший подход, я думаю. Второй вопрос заключается в том, где разместить эту статическую функцию. –

ответ

3

Для хорошо понятного кода, если вы используете какие-либо методы public static, напишите его в отдельном классе.

Не нужно писать в Application классе.

И я думаю, что Application класс, чтобы начать определенные вещи, как аналитика Multidex и т.д., так как класс приложения запускается перед Activities или Services бегутся, И я в основном использовать Application класс для инициализацией Multidex.

Так что лучше всего создать другой класс, например Utils.java для public static Метод.

+1

Согласны, а затем вы можете сделать пакет «utils», где вы начнете их собирать (по мере того, как ваш проект будет усложняться). Вот пример задания, которое я недавно написал, где перед рефакторингом у нас было множество файлов utils. После того, как они поместили все в свой пакет, это действительно помогло очистить код. https://gitlab.com/vandy-aad-2/aad-2-assg-2/tree/master/app/src/main/java/vandy/mooc/assignments/framework/utils – mawalker