问题标签 [android-service-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 绑定到已启动的服务
我有一个远程服务,我从 startService() 开始,然后用 bindService() 绑定。我这样做是因为我希望服务在后台运行,直到应用程序明确停止它,即使用户通过滑动关闭 Activity 也是如此。以下是服务的相关部分:
这是活动:
这是服务的清单:
当我通过 startService() 和 bindService() 在调试器中逐步运行它时,一切都很好。在 Service 中,onStartCommand() 被调用,然后是 onBind(),而在 Activity 中,onServiceConnected() 被 Binder 调用。但是,当我不调试时,出于某种原因,服务会在其 onStartCommand() 方法之前调用其 onBind() 方法。这是日志的输出:
Activity 的 onServiceConnected() 方法永远不会被调用。我尝试在 bindService() 调用中使用 BIND_AUTO_CREATE,但没有效果。很明显,我在这里遇到了某种竞争状况,但我可能已经运行了 20 次,而且它总是以相同的顺序出现。我能想到的在 Service 中强制执行正确调用顺序的唯一方法是将 BroadcastReceiver 放入 Activity 并从 Service 的 onStartCommand() 方法发送 Intent 以让 Activity 知道是时候调用 bindService( )。这看起来很笨拙......有没有更好的方法来做到这一点?还是有什么我遗漏的东西导致了无序呼叫?
android - Android:绑定多个客户端需要多次“返回”才能停止服务
我有示例应用程序来学习绑定服务。它在启动时设置通知。如果我通过单击通知启动应用程序 N 次,那么我也需要单击“返回”按钮 N 次以关闭应用程序并停止服务,这当然是用户预期的错误行为。单击“返回”应停止应用程序。来自http://developer.android.com/guide/components/bound-services.html的 Android 开发人员指南:“多个客户端可以同时连接到服务。但是,系统仅在第一个客户端绑定时调用服务的 onBind() 方法来检索 IBinder。然后系统将相同的 IBinder 传递给绑定的任何其他客户端,而无需调用onBind() 再次。当最后一个客户端与服务解除绑定时,系统会销毁该服务(除非该服务也由 startService() 启动)。所以,我假设每次点击通知都会绑定另一个客户端,然后需要依次解除绑定。我怎样才能摆脱这种不受欢迎的行为?
相关代码:
java - 如何将服务对象传递给 MyActivity?
首先:我在Android编程方面比较大
我使用服务创建了简单的 TCP 套接字。
MainActivity
触发按钮时,客户端连接到服务器。
现在我想使用服务对象创建PrintWriter
对象。MainActivity
Socket
我知道可以使用 JSON 传递Service
对象Activity
。
我在互联网上搜索,但不知道如何通过它。
请给我简单的代码示例来传递对象。
我的服务.java
MainActivity.java
现在我需要 MyService.java (在这种情况下如何传递对象 Ie Socket
对象clientsocket
)和 MainActivity.java (如何检索传递的对象 Ieclientsocket
并使用它来创建PrintWriter
对象) 的清晰完整的代码
android - 后台持久服务不会被杀死的活动
在 Android 上,我有一个Activity
调用FirstActivity
,它启动一个Service
命名MyService
来在后台执行网络操作。TheActivity
和 theService
一直通过调用方法相互通信。
现在,当用户从FirstActivity
to导航时,不应终止或重新创建SecondActivity
后台服务,而是保持活动状态并传递给现在与该服务进行通信的服务。SecondActivity
换句话说,Service
只要两个Activity
s 之一在运行,它就应该在运行,并且当用户在两个Activity
s 之间导航时它不应该停止。
其中一个Activity
s 将始终处于前台,在此期间,服务应该(最好)永远不会被杀死。我认为这应该不是问题,因为这两个Activity
中的一个始终处于活动状态,因此 Android 知道该服务很重要,而不是必须被杀死的东西。
(如果没有办法阻止 Android 不时杀死并重新创建服务,我需要一种方法来优雅地恢复服务的完整状态。)
综上所述,两者的“组合”Service
应该具有相同的寿命。Activity
它应该从它们中的第一个开始,并且在它们都被摧毁之前停止。
那么以下代码对于该设置和目标是否正确?
Activity
这是在s 的后台保证不会被杀死或重新创建的持久服务的最佳方法吗?
怎么样Context.BIND_AUTO_CREATE
?在这里设置这个标志是否正确?那么Context.BIND_ADJUST_WITH_ACTIVITY
——Context.BIND_WAIVE_PRIORITY
我需要这些吗?
android - 使用 DownloadManger 的 Android 下载队列
我正在使用 DownloadManager 在 android 中下载我的文件,它非常棒,因为它可以处理所有事情(连接丢失、重试等)。问题是我希望我的文件一个接一个地下载到队列中,据我所知,DownloadManager 没有'不提供此功能。所以多次调用 DownloadManager.enqueue(...) 会导致所有文件的并发下载。我怎样才能解决这个问题?
我不能只是在我的活动中排队,然后将下载一个一个地发送到 DownloadManger,因为活动可能随时被破坏!
IntentService 在这里也不起作用!!即使它一个一个地处理请求,对 DownloadManager.enqueue() 的调用也会运行得如此之快,然后下一次调用,结果将再次并发下载!
我的第三个选择是使用 LocalService 获取请求并在先前开始的下载完成时调用 DownloadManager.enqueue() 但我应该怎么做?我的服务即使在运行时也需要从我的活动中获取请求!(所以我不能只把数据放在意图中)。为了启用通信,我需要将其设置为绑定服务,并且正如文档所说,当没有任何绑定时它会破坏!
因此,当我的活动关闭时,我会丢失排队的下载。我对吗?
最后一个选项是在单独的进程中使用服务,因为即使我的第三个选项有效,只要应用程序未关闭,它也只会下载文件。这个选项似乎很可怕,因为我必须处理进程间通信,我不知道那是什么!!
所以我错过了什么?!这不应该是解决我的问题的更简单方法吗?
我只是下载文件是队列!我也不希望我的服务在没有什么可下载的情况下无限期地运行。
android - 具有 u10_system 用户 ID 的 Android 服务
这是在启用了多帐户功能的 Android Kitkat/Lollipop 下。我创建了一个用户 ID 为“system”的服务,并且有一个绑定到该服务的活动。然后在不同的用户帐户中,我尝试将另一个活动绑定到同一服务(使用标志 Context.BIND_AUTO_CREATE)。我希望该活动将绑定到用户 ID 为“system”的现有服务。但是,Android 使用用户 ID“u10_system”创建了一个新服务。为什么会发生这种情况?是否可以绑定到用户 id 为“system”的现有服务?
编辑:对于服务,我有这个属性:android:singleUser="true"。该服务还具有 INTERACT_ACCROSS_USERS 权限。
android - Android,为什么后台线程停止?
MainActivity 在 onCreate 中启动我的 TestService 并在 onStart 方法中绑定。AsyncThread 在 TestService onStartCommand 中启动。bind 和 unbind 方法以正确的顺序调用。一切都很完美,绝对没有问题:)。
问题从这里开始:如果 MainActivity 被终止,那么运行的异步线程也会停止,没有任何中断异常,但 TestService 仍在运行,我可以在运行应用程序设置中检查。请帮助我找出线程停止工作的原因。
PS:我与 Thread/Handler 进行了交叉检查,但结果相同。
MainActivity 和服务代码在这里:
android-service - 由 android 本地有界服务中实现的函数返回的 Nullpointer
我正在android中编写一个本地绑定的服务。我的应用程序有两个类,即。活动和服务
在我的活动中,我有一个 TextView 和一个按钮。我在活动的 onCreate() 方法中启动和绑定服务。单击按钮时,我希望使用从 Service 类中编写的函数返回的 String 值更新我的 TextView
但是我总是将 null 作为返回值。可能是什么问题?
我在这里给出我的整个代码
这是活动课
}
我的服务类如下
}; }
android - android中绑定服务的安全异常来自单独应用程序中提到权限拒绝的活动
我在 android 中开发了一个有界服务应用程序,以通过 USB 串行端口从血糖仪设备获取数据。我在另一个应用程序中开发了另一个活动,从那里我启动服务以在活动屏幕中获取数据。
当我尝试在我的设备上安装活动应用程序时出现以下错误
我在我的活动和服务应用程序的清单文件中声明了以下权限。
这是我的服务应用程序的清单文件
这是我的 Activity 应用程序的清单文件
我已经添加了
在我的两个应用程序中。
当我首先安装服务应用程序时,它正在安装但后来我尝试安装活动应用程序,它抛出错误
尝试调用时出现以下错误(在 logcat 中)
从活动
我没有从本网站的现有问题中得到任何解决方案。
对此问题的任何答案表示赞赏。
java - 我需要完美配对 bindService / unbindService 调用吗?
从所有代码示例中可以看出,如果我们调用了#bindService,我们只想调用#unbindService(在相同的上下文中),这是通过布尔检查完成的。
但是在#bindService 调用中没有类似的检查——即我们不检查我们是否已经首先绑定以避免“双重绑定”。
所以我的问题——
- 如果我多次绑定服务但仅取消绑定一次,或者仅绑定一次并取消绑定多次,那么“会发生坏事”吗?这种不对称对我来说似乎很奇怪,但想看看是否有人知道答案。我现在正在玩它自己试图弄清楚它,但更喜欢更有经验的开发人员的“官方”答案。
- 什么被认为是“绑定”和“未绑定”操作 - 是不是我只是调用了#bind(或#unbind)API,并且这些调用必须成对,或者是由必须配对的#onServiceConnected/Disconnected 回调?谷歌自己的例子似乎表明前者是真的,有人可以证实吗?如果前者为真,那么最后一个更微妙的问题是:如果#bindService 返回假,即android 甚至不会尝试连接,因为它无法解析服务,在这种情况下调用#unbindService 是否安全?
谢谢你。