繁体   English   中英

使用基类活动将多个活动(选项卡)绑定到服务

[英]Binding Multiple Activities(Tabs) to a Service using a Base Class Activity

发布后发现这些:

http://code.google.com/p/android/issues/detail?id=2665 http://code.google.com/p/android/issues/detail?id=2483

MyApp - first Activity that calls startService();
AwesomeService - background Service that starts a "connection" thread
ConnectedActivity - Activity with code to handle connection and service binding
MyAppActivity - Tabbed Activity
TabAActivity - Tab Activity

我有一个名为ConnectedActivity的Activity基类。 在这个类中,我处理绑定到连接到远程系统的后台服务。 ConnectedActivity还具有观察者方法,用于捕获连接中的更改以及来自服务的其他通知。

对于我需要“连接”的其他活动,我只需扩展ConnectedActivity。

我开发了一个选项卡式活动,其中选项卡也是活动。 对于选项卡式活动和每个选项卡,我需要扩展ConnectedActivity。

我遇到的问题是,当我加载选项卡式活动(和选项卡活动)时,它是唯一绑定到服务的活动。 选项卡活动不绑定到服务。

下面,serviceBound()是我在ConnectedActivity类中实现的回调,因此扩展ConntectedActivity的类可以在绑定服务后执行操作。 您可以从我的日志文件中看到只有MyAppActivity实际绑定。

多个活动是否可以绑定到服务?

编辑:这里找到

多个客户端可以立即连接到该服务。 但是,只有在第一个客户端绑定时,系统才会调用您的> service的onBind()方法来检索IBinder。 然后,系统将相同的IBinder传递给任何其他绑定的客户端,而无需再次调用onBind()

所以现在我真正的问题变成..这是否意味着回调(onServiceConnected()&onServiceDisconnected)不会在绑定的“第二个”活动中被调用?

结束编辑:

12-31 02:40:00.625: I/MyApp(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.705: I/AwesomeService(31345): onCreate()
12-31 02:40:00.705: I/AwesomeService(31345): onStartCommand(Intent intent, int flags, int startId)
12-31 02:40:00.725: I/ConnectedActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.725: I/MyAppActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.836: I/ConnectedActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.836: I/TabAActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.896: I/ConnectedActivity(31345): onStart()
12-31 02:40:00.896: I/TabAActivity(31345): onStart()
12-31 02:40:00.956: I/ConnectedActivity(31345): onStart()
12-31 02:40:00.966: I/MyAppActivity(31345): onStart()
12-31 02:40:00.966: I/ConnectedActivity(31345): onResume()
12-31 02:40:00.966: I/MyAppActivity(31345): onResume()
12-31 02:40:00.966: I/ConnectedActivity(31345): onResume()
12-31 02:40:00.966: I/TabAActivity(31345): onResume()
12-31 02:40:00.976: I/AwesomeService(31345): onBind(Intent intent)
12-31 02:40:01.056: I/ConnectedActivity(31345): onServiceConnected(ComponentName className, IBinder service)
12-31 02:40:01.056: I/AwesomeService(31345): LocalBinder:getService()
12-31 02:40:01.056: I/MyAppActivity(31345): serviceBound()

我希望也能看到:

AwesomeService(31345): onBind(Intent intent)
ConnectedActivity(31345): onServiceConnected(ComponentName className, IBinder service)
AwesomeService(31345): LocalBinder:getService()
TabAActivity(31345): serviceBound()

好吧,也许我之前使用stackoverflow.com并且得到快速回复可能会被宠坏。 也许它离新年如此接近,除了我以外的每个人都有生命,我被迫深入挖掘! 我编辑了以上帖子以包含以下链接:

http://code.google.com/p/android/issues/detail?id=2665 http://code.google.com/p/android/issues/detail?id=2483

在其中一个链接中找到的最有趣的信息是实际的解决方案:

评论2由olivier .... @ gmail.com,2009年6月28日使用getApplicationContext()。bindService而不仅仅是您的活动上的bindService解决了问题,因为它使用更高级别的应用程序上下文。

要添加Olivier的注释,请确保并为unBindService()调用使用相同的Context。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM