- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 gingerbread 2.3.4 api lvl 10。
我在启动完成后启动服务。为此,我添加了一个启动服务的广播接收器。我在启动器中使用相同的服务。我试图通过向 Intent 添加额外的参数来绑定(bind)到服务。通过广播回复从服务中获取结果。
问题是当它第一次绑定(bind)时,服务上的 onBind() 被触发。进一步的绑定(bind)不会调用服务上的 onBind()。我相信问题是服务直接在 after_boot 启动。当我不在启动时启动服务并让 Activity 使用 Context.BIND_AUTO_CREATE 启动它时,它确实按预期运行。
我想到的唯一解决方案是更改服务的 onUnbind() 并在服务的 onRebind() 调用中发出 onBind()。我不喜欢这个解决方案,因为它可能会在以后的 android 版本中中断,导致 onBind() 方法被调用两次。
那么为什么后续绑定(bind)不会在启动完成后启动的服务上触发。欢迎任何其他优雅的解决方案。
PS:我已经在 aidl 中实现了它,但我不喜欢它,因为该服务将执行一些异步操作以返回数据,我必须在两个应用程序中添加 aidl 文件,将添加导致代码臃肿的处理程序.
提前致谢。我的代码 fragment :
服务 list :
<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>
当我绑定(bind)到服务时:
Intent intent = new Intent(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);
最佳答案
来自关于绑定(bind)到服务的文档:
Multiple clients can connect to the service at once. However, the system calls your service's onBind() method to retrieve the IBinder only when the first client binds. The system then delivers the same IBinder to any additional clients that bind, without calling onBind() again.
这种行为不会改变,所以你重写 onUnbind 返回 true 的方法,然后在 onRebind 期间调用 onBind 是完全可以的,尽管原始绑定(bind)仍然会发送到客户端,而不是你可能生成的任何新绑定(bind)您对 onBind 的新调用。 (即,你真的不应该调用 onBind,而只是将 onRebind 作为一个单独的案例来处理)
关于android - 不会触发后续的 onBind() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191693/
我正在编写一个带有绑定(bind)服务的基于服务的应用程序,但该服务的 onBind() 方法似乎从未被调用(使用 Toasts 和 Logs 对其进行测试)。 服务: import android.
我有一个远程服务,外部应用程序可以绑定(bind)到该服务。在某些情况下,我可能希望拒绝绑定(bind)。 According to the documentation , Return the co
我是安卓新手,我必须编写一个服务(在不同的进程上)来处理我的互联网通信功能,我查看了一些博客,发现使用 Messenger 我们可以在 Activity 和服务(在不同的进程上)之间进行通信, 我的问
我有一个关于 Android 服务的理解问题。我有一个执行后台 http 操作的服务和一个应该显示这些 http 操作的当前状态的 Activity 。 所以我实现了 Binder 接口(interf
使用 gingerbread 2.3.4 api lvl 10。 我在启动完成后启动服务。为此,我添加了一个启动服务的广播接收器。我在启动器中使用相同的服务。我试图通过向 Intent 添加额外的参数
我遇到了以下情况。我的应用程序中有一项服务。该 Activity 使用 startService() 启动它,以防止它在将来取消绑定(bind)时关闭。然后使用 bindService() 绑定(bi
一旦我开始搜索/过滤我的 recyclerview 列表结果,我就会不断从搜索适配器中的 onBind 方法中获取 IndexOutofBoundsException。这是异常(exception):
我希望只有某些应用程序可以执行绑定(bind)到服务。我可以通过服务中的适当代码阻止某些应用程序绑定(bind)到服务吗?例如,如果服务有一个允许的应用程序列表(即,一个简单的字符串数组及其包名称),
我正在尝试创建一个可绑定(bind)的粘性服务(我需要在后台对该服务持有的某些数据运行潜在的异步操作)。为此,我需要确保 onBind 始终在 onStartCommand 之后运行。有什么办法可以保
onBind() 方法的“绑定(bind)”操作与仅调用 onStartCommand() 有何不同? onStartCommand() “当另一个组件(例如 Activity )通过调用 start
我试图实现一个简单的 RecyclerView 示例,其中的项目交替着色 /image/BFmJi.jpg效果很好 如果没有 Framelayout,我们将获得清晰的着色代码,如第一张图片所示即元素以
警报不会触发,因为缺少 openClose() 函数并引发错误。 如何解除绑定(bind)或更好地删除 onclick 标签? $('.spoilertop').click(function(){
我目前正在使用适配器返回 2 个列表中的项目集,这样: private List mListResponseList; private List mMyEventsList; 现在,MyListRes
在我的应用程序中,我有一个用于播放 MP3 流音乐的服务。我启动它 (startService()) 并连接到它 (bindService()),因此当没有客户端连接时它不会停止。如果播放器暂停,我会
我有一项服务主要管理用于播放播客 的MediaPlayer 实例。一旦 Activity 绑定(bind)到服务,它就可以执行播放、暂停、停止等操作。我使用服务是因为我希望播客即使在 Activity
我的应用程序遇到了一个奇怪的问题。我有一个在后台运行的 LocationService。我管理其生命周期的方式是: 在 onResume 中,每个 Activity 都使用 bindService(i
如果我尝试使用 Context.bindService() 绑定(bind)到服务,并且该服务尚未运行/启动,我是否可以保证 onCreate那个Service肯定会在onBind之前被调用?我找不到
我正在尝试绑定(bind)服务,但 onBind() 总是返回 false。 这是ServiceConnection的代码- private ServiceConnection mConnection
RecyclerView 没有调用 onCreate 或 onBind 或构造函数。没有断点命中或日志。可能是什么原因?可能是什么原因?任何人如何解决这个问题?这是我的代码。适配器: public c
我正在尝试制作一个按钮来更改 Android Lollipop 中的中断过滤器(无、优先级、全部)。当我按下按钮时,日志显示 W/NotificationListenerService[Notif
我是一名优秀的程序员,十分优秀!