Статьи

Как стать ленивым, но продуктивным разработчиком Android

Я уверен, что вы можете быть удивлены и думать о названии поста :), но да, заголовок идеально подходит для разработчиков. Насколько я знаю, разработчики Android ленивы в написании кода, такого как findViewById (), прослушивателей кликов и т. Д. Итак, как мы можем оптимизировать время пропускной способности для написания бизнес-логики для приложения и избегать написания такого кода? Давайте будем ленивыми, но продуктивными разработчиками Android. Как? Ну, вот о чем я собираюсь написать.

Доступно много сторонних библиотек и фреймворков, либо мы не знаем об этом, либо не использовали, либо определили свои собственные библиотеки, либо не думали использовать такие библиотеки по ‘n’ причинам. , Если мы будем использовать некоторые из них при разработке приложений для Android, мы сможем достичь таких целей, как обеспечение совместимости, классного и отлаженного пользовательского интерфейса, чистого кода и т. Д. Поэтому я хотел бы больше узнать о таких библиотеках, которые могут помочь начинающим и опытным разработчикам.

Давайте поговорим о библиотеках внедрения зависимостей сегодня.

Что такое инъекция зависимостей?

Внедрение зависимостей — это шаблон разработки программного обеспечения, который позволяет удалять жестко запрограммированные зависимости и позволяет изменять их как во время выполнения, так и во время компиляции. [Источник: Википедия ]

Некоторые из популярных и широко используемых библиотек внедрения зависимостей:

инъекция зависимости Android

RoboGuice:

roboguice

roboguice

Roboguice — это структура внедрения зависимостей для приложений Android, которая обеспечивает простоту и легкость внедрения зависимостей в Android, используя собственную библиотеку Google Guice. Он сглаживает некоторые складки в вашем опыте разработки приложений для Android, делая вещи простыми и увлекательными. Вы всегда забываете проверять наличие нуля, когда получаете getIntent (). GetExtras ()? RoboGuice 2 поможет вам. Думаешь, что приведение findViewById () к TextView не должно быть необходимым? RoboGuice на это.

Используя RoboGuice, вы можете добавить свой View, Resource, System Service или любой другой объект. RoboGuice может помочь вам уменьшить код приложения. Меньше кода означает меньше шансов проблем / ошибок и может помочь вам сэкономить усилия, необходимые для написания или изменения конкретного кода в проекте. Это помогает вам генерировать читаемый код, который может быть легче следовать.

Давайте посмотрим на другое использование библиотеки RoboGuice.

Использование библиотеки RoboGuice:

  • Инъекция представлений:: Для инициализации представлений используйте @InjectViews, например: @InjectView (R.id.textView1) TextView textView1;
  • Внедрение ресурсов: для инициализации и получения ресурсов используйте @InjectResources, например: @InjectResource (R.string.app_name) String name;
  • Внедрение системных служб. Для инициализации и доступа к системным службам используйте @Inject, например: @Inject LayoutInflater inflater;
  • Инъекция объекта POJO. Чтобы внедрить и инициализировать объект POJO, используйте @Inject, например: @Inject Foo foo;

Монтаж

Чтобы использовать RoboGuice, вам необходимо скачать следующие JAR-файлы и добавить их в ваш путь к классам:

Давайте посмотрим на пример общего кода активности:

пример

public class TestActivity extends Activity{

    TextView textView1;
    TextView textView2;
    ImageView imageView1;
    String name;
    Drawable icLauncher;
    LocationManager locManager;
    LayoutInflater inflater;
    NotificationManager notifyManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_test);

        textView1 = (TextView) findViewById(R.id.textView1);
        textView2 = (TextView) findViewById(R.id.textView2);
        imageView1 = (ImageView) findViewById(R.id.imageView1);
        name = getString(R.string.app_name);
        icLauncher = getResources().getDrawable(R.id.ic_launcher);
        locManager = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);
        inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        notifyManager = (NotificationManager) getSystemService(Activity.NOTIFICATION_SERVICE);

        textView1.setText("Hello World! RoboGuice demo");

    }
}

Давайте проверим магию RoboGuice и уменьшим код.

Использование RoboGuice


Чтобы использовать RoboGuice для внедрения зависимостей, вам необходимо
расширить либо
RoboActivity, либо
RoboFragment .

public class TestActivity extends RoboActivity{

    @InjectView(R.id.textView1) TextView textView1;
    @InjectView(R.id.textView2) TextView textView2;
    @InjectView(R.id.imageView1) ImageView imageView1;
    @InjectResource(R.string.app_name) String name;
    @InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
    @Inject LocationManager locManager;
    @Inject LayoutInflater inflater;
    @Inject NotificationManager notifyManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_test);

        textView1.setText(name);

    }
}

Теперь я уверен, что вы сможете реализовать преимущества использования RoboGuice, поэтому давайте поговорим о преимуществах:

Преимущества использования RoboGuice

  • Не нужно инициализировать представления, если вы хотите, то введите его с помощью @InjectViews
  • Нет необходимости инициализировать системный сервис. Если вам нужно, то введите его с помощью @Inject
  • Нет необходимости инициализировать Drawable, строки и другие ресурсы. Если вам нужно, то введите его с помощью @InjectResource
  • Все вышеперечисленные методы помогут вам уменьшить объем кода.
  • Меньше кода => Меньше шансов ошибок / проблем
  • Меньше кода => Разработчик Android может сэкономить усилия при написании кода и полностью сосредоточиться на реальной бизнес-логике приложения для Android

RoboGuice и ActionBarSherlock

Как я упоминал ранее, в окне оповещения вы должны расширить либо RoboActivity, либо RoboFragment, чтобы использовать RoboGuice в частности в Activity или Fragment. Но что, если вы включили ActionBarSherlock в свой проект для управления совместимостью? Проблема в том, что вы расширили либо SherlockActivity, либо SherlockFragmentActivity для своей деятельности или, в частности, фрагмента, и теперь ситуация такова, что мы не можем использовать RoboGuice с ActionBarSherlock.

Но есть одно решение: вы должны определить пользовательские базовые классы для действий и фрагментов, чтобы использовать оба RoboGuice и ActionBarSherlock.

Вы можете скачать базовые классы здесь: https://github.com/rtyley/roboguice-sherlock или загрузить файл JAR для того же: RoboGuice + Sherlock.jar , включите любой из них в свой проект.

Я думаю, что я закончил исследовать все о RoboGuice и его использовании / преимуществах в приложениях для Android. Если какой-либо пункт не указан, пожалуйста, прокомментируйте. В следующей статье я буду изучать другую библиотеку, которая может сделать вас ленивым, но продуктивным разработчиком для Android:)