TGViewer
Dev Easy Notes Dev Easy Notes @dev_easy_notes · 2.91K subscribers
Post #115 1.67K
С этим пунктом в LeakCanary все еще проще. Как вообще мы указываем системе какую Activity нужно запустить первой? Опять-таки через AndroidManifest и специальные intent-filter которые указываем у Activity. В intent-filter мы прописываем Action показывающий на какие действия система должна предлагать эту Activity и Category показывающая системе дополнительную инфу где располагать эту Activity.

Для главной Activity Action = android.intent.action.MAIN, Category = android.intent.category.LAUNCHER. Система читает этот Manifest и исходя из этих action и category понимает, что эту Activity нужно отобразить в лаунчере. Интересный момент заключается в том, что таких Activity может быть много. У вас есть возможность сделать хоть 3 разных точек входа в приложения причем с разными иконками и разными подписями.

LeakCanary в своем манифесте подсовывает такую Activity. При нажатии на эту Activity просто открывается не главная Activity вашего приложения, а вот эта Activity библиотеки которая позволяет получить данные об утечках этого приложения. Другими словами, помимо специального Content Provider, библиотека подсовывает вам еще и свои Activity (их там несколько).

Application при этом только один, а значит каждая такая Activity будет привязана именно к конкретному приложению, это позволяет избежать путаницы когда у вас два разных приложения в которых используется LeakCanary.

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

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

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

LeakCanary используют taskAffinity для своих Activity чтобы не влезать в навигацию вашего приложения. Это позволяет сделать полную видимость того, что у вас в одном приложении два. Первое основное и второе которое связано исключительно с информацией про утечки.
  • 👍 29
  • ❤ 1
  • 🔥 1
More from @dev_easy_notes
  1. Sep 24, 2026На всякий случай напомню напомню, если такую хуйню видите, сразу в бан кидаете. Вы скорее…
  2. Aug 4, 2026Короче, поясню, я давно ничего не пишу, потому что заебался) возможно я скоро вернусь, как…
  3. Aug 4, 2026Post #596
  4. Apr 17, 2026Меня вот что еще дико бесит, через год я буду уже как 10 лет в индустрии и все равно, кажд…
  5. Apr 15, 2026video post
  6. Apr 9, 2026Как оценить работу модели? Часто вижу высказывания в стиле: вот новый клод стал тупее, или…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →