0

Как можно обмениваться объектами между сервисом, запущенным в определенном процессе, и остальным моим Android-приложением?Android: доля объекта между сервисом в определенном процессе и действии

В моем манифесте я установил process="com.test.myprocess" в служебную декларацию.

Я инициализирую объект «сеанс», когда мой пользователь вхожу в систему самостоятельно. Затем я запускаю службу Android, и объект сеанса вводится в нее с помощью аннотации Android. Но когда я делаю session.getUuid() из моего введенного сеанса в моем сервисе, я всегда получаю «null».

Если я делаю то же самое в процессе, соответствующем моему приложению (например, в UiThread), значение не равно нулю.

Благодаря

+0

Да, когда пользователь удаляет приложение из недавнего приложения для Android, я не хочу, чтобы этот Android убил службу – psv

+0

, для этого создайте [Службу связывания с помощью Messenger] (https://developer.android.com/) guide/components/bound-services.html # Messenger) :) дайте мне знать, если у вас есть вопрос –

+0

Я использую аннотацию Android, я не знаю, есть ли простой способ привязать службу к этой структуре? – psv

ответ

0

Для отправки объекта из Service к Activity я предложил бы использовать функцию:

public void sendBroadcast(Intent intent); 

Создать соответствующий Intent, поместите переменный или дополнительный объект. Вы должны реализовать интерфейс Serialisable. Если он не может сериализовать его в JSON и передать строку. Как это:

Intent intent = new Intent(); 
intent.setAction("UNIQUE_BROADCAST_ID"); 
intent.putExtra("EXTRA_ID", ...); 
this.sendBroadcast(intent); 

В вашей Activity зарегистрировать BroadcastReceiver с определенным кодом:

registerReceiver(receiver, new IntentFilter("UNIQUE_BROADCAST_ID")); 
+0

Да ... это может сработать, но я, вероятно, вручную свяжусь с сервисом как советник по Android. это просто странно, что нет простого способа сделать это с Android Annotation – psv

0

ли вы связать услугу? вы можете узнать кое-что об AIDL. Объект класса относится только к процессу, поэтому, когда вы используете Annotation для получения объекта сеанса в другом процессе, результат равен null.

+0

Вы уверены, что объект класса принадлежит только процессу, даже если мое приложение создает два процесса? Если это так, это означает, что если я установлю process="com.test.myprocess", я должен использовать AIDL-архитектуру? Кажется, немного сложно использовать AIDL с аннотацией Android, мне нужно работать с API-интерфейсом «Stock» android API ... что означает отсутствие зависимостей от впрыска – psv

+0

Да, процесс выполняется на виртуальной машине dalvik. для java-файла в dvm есть только один объект calss. как говорят другие, вы можете использовать широковещательный приемник. – whis