Я хочу запустить сервис, который необходимо отправить и получить через через открытое соединение Socket
. Это Socket
является полем объекта, например:Как использовать Socket as Intent в Android?
public class A implements Serializable {
Socket socket;
}
Я планировал передать этот объект как Намерение дополнительно:
A a = getInstanceOfA(); // Get an instance of A from somewhere.
intent.putExtra("A", a);
Конечно, A
сериализуем, потому что она должна быть , чтобы выразить это как дополнительное намерение. Но ждать. Гнездо не сериализуемо.
Как это исправить?
- Могу ли я пометить розетку как
transient
, чтобы она не сериализовалась? Или, если я сделаю это, больше не удастся отправить несколько байтов через этот сокет? - Или мне следует отказаться от использования
Service
s иBroadcastReceiver
и использовать другой подход? - Или есть другой способ выполнить вышеупомянутый гол?
PS: Я уже read something о передаче InputStream
сек и Socket
сек между Activity
с, но данный ответ не очень понятно.
Я не знаю, что вы можете сделать это с намерением. Если вы знаете, что отправитель и получатель находятся в одном процессе, вы можете использовать одноэлементное или другое глобальное решение. В противном случае есть за кадром трюки, встроенные как в Android, так и в базовый Linux, которые поддерживают передачу рабочих сокетов между процессами, соответственно, в Binder (например, сервисные соединения AIDL) или в сокетах Unix домена (LocalSockets в Java говорят). –
В основном ссылка, которую вы включили, указывает на то, что желание сделать это является симптомом плохого дизайна и что вы бы лучше поместили все сокетные взаимодействия в Службу; во многих случаях я бы согласился, хотя это возможно с помощью перечисленных мной альтернативных методов. –