2015-02-21 3 views
1

Я хочу запустить сервис, который необходимо отправить и получить через через открытое соединение 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 с, но данный ответ не очень понятно.

+0

Я не знаю, что вы можете сделать это с намерением. Если вы знаете, что отправитель и получатель находятся в одном процессе, вы можете использовать одноэлементное или другое глобальное решение. В противном случае есть за кадром трюки, встроенные как в Android, так и в базовый Linux, которые поддерживают передачу рабочих сокетов между процессами, соответственно, в Binder (например, сервисные соединения AIDL) или в сокетах Unix домена (LocalSockets в Java говорят). –

+0

В основном ссылка, которую вы включили, указывает на то, что желание сделать это является симптомом плохого дизайна и что вы бы лучше поместили все сокетные взаимодействия в Службу; во многих случаях я бы согласился, хотя это возможно с помощью перечисленных мной альтернативных методов. –

ответ

0

Это возможно без некоторых возможных грязных хаков.

Как упомянуто в нем Chris Stratton - его можно обойти проблему путем извлечения его статическим или одиночным тоном.

В качестве альтернативы, можно изменить структуру приложения, поэтому сама служба создает Socket или управляет им.