【问题标题】:Binding Multiple Activities(Tabs) to a Service using a Base Class Activity使用基类活动将多个活动(选项卡)绑定到服务
【发布时间】:2015-04-25 02:45:22
【问题描述】:

发布后发现这些:

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。

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

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

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

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

编辑:找到这个here

多个客户端可以同时连接到服务。但是,只有在第一个客户端绑定时,系统才会调用 >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()

【问题讨论】:

    标签: android binding service tabs


    【解决方案1】:

    好吧,也许我之前使用过 stackoverflow.com 并得到了快速响应。可能是临近过年,除了我以外的每个人都有自己的生活,我不得不挖得更深了!我编辑了上面的帖子以包含这些链接:

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

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

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

    要添加到 Olivier 的评论中,请确保对 unBindService() 调用也使用相同的上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多