0

如何在特定流程中运行的服务与我的Android应用的其余部分之间共享对象?Android:在特定流程和活动中的服务之间共享对象

在我的清单中,我将process="com.test.myprocess"设置为服务声明。

当我的用户在应用程序中登录时,我初始化了一个“会话”对象。然后我开始一个Android服务,并使用Android Annotation注入会话对象。但是当我在我的服务中从注入的会话中执行session.getUuid()时,我总是得到“null”。

如果我在对应于我的应用程序(例如在UiThread中)的过程中做同样的事情,则该值不为空。

感谢

+0

是的,当用户从最近的Android应用程序中扫掉应用程序时,我不希望该Android杀死服务 – psv

+0

,因为这会创建一个[使用Messenger绑定服务](https://developer.android.com/ guide/components/bound-services.html#Messenger):)让我知道如果你有任何问题 –

+0

我正在使用Android Annotation,我不知道是否有一种简单的方法来绑定一个服务与这个框架? – 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注释 – psv

0

你绑定的服务?你可以学习一些关于AIDL的知识。一个类对象只属于一个进程,所以当你使用Annotation在另一个进程中获取会话对象时,结果为空。

+0

你确定一个类对象只属于一个进程,即使我的应用程序创建两个进程?如果是这样,这意味着如果我设置process="com.test.myprocess",我必须使用AIDL架构?在Android Annotation中使用AIDL似乎有点困难,我必须使用“stock”android API ......这意味着没有注入依赖关系 – psv

+0

是的,一个进程在dalvik虚拟机上运行。对于java文件,dvm中只有一个calss对象。正如其他人所说你可以使用广播接收器。 – whis