Используя Отто, метод подписывается только в том случае, если я вызываю его напрямую в другом месте.

У меня возникла проблема, когда один из моих методов subscribed не вызывается для сообщения с правильным типом события, если этот метод subscribed не используется (вызывается) где-то еще.

Вот некоторая важная информация о коде:

  • Метод одного из моих классов помечен @Subscribe.
  • Просматривая код с помощью отладчика, я обнаружил, что в моих конкретных обстоятельствах у класса нет методов, аннотированных с помощью @Subscribe.
  • Если я не вызову метод напрямую в какой-то момент времени (не имеет значения, когда или даже если он действительно вызывается во время выполнения) в другом месте, мой сообщение не работает.
  • IDE (Android Studio) уведомляет меня, что «метод никогда не используется»

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

Или я могу сделать метод статическим, но я бы не хотел, потому что я использую внутри него переменные-члены.

Любые решения, почему это происходит, хотя пример Отто использует аналогичный шаблон


person TeePaps    schedule 28.07.2014    source источник


Ответы (1)


Выяснилось, что проблема в ProGuard. Исправил, добавив следующие строки:

-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}
person TeePaps    schedule 28.07.2014
comment
В какой файл вы это добавили? - person superuserdo; 22.01.2016
comment
Эта ссылка должна вам помочь: developer.android.com/tools/help/proguard.html В значительной степени, если у вас еще нет собственного файла proguard, вы можете указать его расположение в файле build.gradle и добавить в него эти строки. - person TeePaps; 23.01.2016