DEV_EASY_NOTES Telegram 142
Итак, Binder. У нас задача передать данные между двумя процессами и желательно через оперативку, чтобы не было накладных расходов и все было безопасно. Для этого в Android был разработан Binder.

Binder это по сути фреймворк для построения межпроцессной коммуникации. Сам Binder работает на уровне ядра системы. Его фишка в том, что он позволяет описать интерфейсы на специальном языке AIDL. AIDL это что-то вроде супер урезанной Java. После чего при помощи кодогенерации сгенерировать классы Java. Дальше вы просто вызываете методы у Java классов как будто у вас все в одном процессе. По факту данные будут ходить между процессами.

Я не стал тут описывать как работает Binder и AIDL так уже делал это стародавних постах. В то время еще не было комментариев на канале и никто мне не сказал что вставлять смайлики в технический текст хреновая идея, поэтому уж извините. Короче, тут и тут самая важная инфа про AIDL и немного про Binder.

В этом посте я лишь сделаю пару важных дополнений. Безопасность в Binder обеспечивается тем, что в методе сервиса т.е в Stub можно получить UID и GID вызывающего приложения. Получив эти данные мы можем убедиться, что данное приложение действительно имеет разрешение на эти данные и все такое.

Вызывая методы на стороне клиента (Proxy) важно не забывать что они блокирующие! Сама коммуникация между процессами через Binder довольно быстрая, т.к все идет напрямую через память. Однако фиг знает что там будет делать сервис на той стороне. Что означает, что методы могут выполняться долго, поэтому желательно если вы вызываете методы через Binder убедится, что это не главный поток.

Что еще интересного у Binder, каждый раз на стороне Stub создается новый поток при вызове. Это значит что вы можете вызвать методы параллельно и на стороне сервиса они будут выполняться также параллельно.

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

Про Binder могут спросить на собесе, но обычно это уже уровень сеньора, поэтому просто знать как примерно это работает не повредит.
🔥32👍31



tgoop.com/dev_easy_notes/142
Create:
Last Update:

Итак, Binder. У нас задача передать данные между двумя процессами и желательно через оперативку, чтобы не было накладных расходов и все было безопасно. Для этого в Android был разработан Binder.

Binder это по сути фреймворк для построения межпроцессной коммуникации. Сам Binder работает на уровне ядра системы. Его фишка в том, что он позволяет описать интерфейсы на специальном языке AIDL. AIDL это что-то вроде супер урезанной Java. После чего при помощи кодогенерации сгенерировать классы Java. Дальше вы просто вызываете методы у Java классов как будто у вас все в одном процессе. По факту данные будут ходить между процессами.

Я не стал тут описывать как работает Binder и AIDL так уже делал это стародавних постах. В то время еще не было комментариев на канале и никто мне не сказал что вставлять смайлики в технический текст хреновая идея, поэтому уж извините. Короче, тут и тут самая важная инфа про AIDL и немного про Binder.

В этом посте я лишь сделаю пару важных дополнений. Безопасность в Binder обеспечивается тем, что в методе сервиса т.е в Stub можно получить UID и GID вызывающего приложения. Получив эти данные мы можем убедиться, что данное приложение действительно имеет разрешение на эти данные и все такое.

Вызывая методы на стороне клиента (Proxy) важно не забывать что они блокирующие! Сама коммуникация между процессами через Binder довольно быстрая, т.к все идет напрямую через память. Однако фиг знает что там будет делать сервис на той стороне. Что означает, что методы могут выполняться долго, поэтому желательно если вы вызываете методы через Binder убедится, что это не главный поток.

Что еще интересного у Binder, каждый раз на стороне Stub создается новый поток при вызове. Это значит что вы можете вызвать методы параллельно и на стороне сервиса они будут выполняться также параллельно.

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

Про Binder могут спросить на собесе, но обычно это уже уровень сеньора, поэтому просто знать как примерно это работает не повредит.

BY Dev Easy Notes


Share with your friend now:
tgoop.com/dev_easy_notes/142

View MORE
Open in Telegram


Telegram News

Date: |

Each account can create up to 10 public channels bank east asia october 20 kowloon Invite up to 200 users from your contacts to join your channel Select “New Channel” End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance.
from us


Telegram Dev Easy Notes
FROM American