使用姜饼 2.3.4 api lvl 10。
启动完成后我正在启动服务。为此,我添加了一个启动服务的广播接收器。我在启动器中使用相同的服务。我正在尝试通过向 Intent 添加额外的参数来绑定服务。通过广播回复从服务中取回结果。
问题是当它第一次绑定时,服务上的 onBind() 会被触发。进一步的绑定不会调用服务上的 onBind()。我相信问题是服务直接在_boot之后启动。当我在启动时不启动服务并让活动使用 Context.BIND_AUTO_CREATE 启动它时,它的行为确实符合预期。
我想出的唯一解决方案是更改服务的 onUnbind() 并在服务的 onRebind() 调用中发出 onBind() 。我不喜欢这个解决方案,因为它可能会在以后的 android 版本中中断,导致 onBind() 方法被调用两次。
那么为什么在启动完成后启动的服务上不会触发后续绑定。欢迎任何其他优雅的解决方案。
PS:我已经在aidl中实现了它,但我不喜欢它,因为该服务将执行一些异步操作来返回数据,并且我必须在两个应用程序中添加aidl文件,这将添加导致代码臃肿的处理程序。
提前致谢。我的代码片段:
服务清单:
<intent-filter>
<action android:name="com.organization.android.ACTION_BOOT_COMPLETED" />
</intent-filter>
<intent-filter>
<action android:name="com.organization.android.WORK_INTENT" />
</intent-filter>
</service>
<receiver android:name=".CoreServiceReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" >
</action>
<category android:name="android.intent.category.HOME" >
</category>
</intent-filter>
</receiver>
当我绑定到服务时:
意图意图 = 新意图(WORK_INTENT);intent.putExtra(“参数”,参数);
context.registerReceiver (broadcastReceiver, new IntentFilter("com.organization.android.WORK_RESULT"));
context.bindService(intent,mConnection, Context.BIND_AUTO_CREATE);
}
当我得到结果时:
context.unbindService(mConnection);
context.unregisterReceiver (broadcastReceiver);