如果我尝试使用Context.bindService()绑定(bind)到服务,并且该服务尚未运行/启动,我是否可以保证onCreate那个Service肯定会在onBind之前被调用?我找不到关于服务生命周期的任何文档,至少在这两个先出现的问题方面是这样。如果不是,在什么情况下onCreate会在onBind之前被调用?在我所做的测试中,onCreate似乎总是在onBind之前被调用。但我需要确定这一点,因为我有一些逻辑,如果这个顺序改变可能会失败如果有帮助,我将绑定(bind)到此服务以获取我将向其发送消息的Messenger。所以实际上,我的问题是“我能保证onCreate会在
我有一个服务,当不再有任何Activity绑定(bind)到它时,我想确保它不会停止()。我知道startService()用于实现此目的,但是可以从服务的onBind()方法中调用它吗?从Activity中调用它对我来说似乎是一个hack,因为服务最清楚它是否想在onUnbind()之后停留。Activity指示服务的当前状态并提供一些控制,因此bindService()似乎是适合在此处使用的方法。 最佳答案 从onBind()中调用startService()应该没问题。如果您在onBind()中有逻辑可以确定服务需要保持运行,
我正在编写一个带有绑定(bind)服务的基于服务的应用程序,但该服务的onBind()方法似乎从未被调用(使用Toasts和Logs对其进行测试)。服务:importandroid.app.Notification;importandroid.app.NotificationManager;importandroid.app.PendingIntent;importandroid.app.Service;importandroid.content.Context;importandroid.content.Intent;importandroid.location.Criteria;i
我有一个关于Android服务的理解问题。我有一个执行后台http操作的服务和一个应该显示这些http操作的当前状态的Activity。所以我实现了Binder接口(interface)等等。我可以调用bindService方法,我的ServiceConnnection的onServiceConnected被调用。但据我所知,onBind不会调用onStartCommand(),因此永远不会调用服务的onStart()。那么我该如何调用服务类的onStart()方法并开始我的操作。或者当我还想要Activity和服务之间的绑定(bind)时,如何在服务中启动我的操作的最佳方式。
使用gingerbread2.3.4apilvl10。我在启动完成后启动服务。为此,我添加了一个启动服务的广播接收器。我在启动器中使用相同的服务。我试图通过向Intent添加额外的参数来绑定(bind)到服务。通过广播回复从服务中获取结果。问题是当它第一次绑定(bind)时,服务上的onBind()被触发。进一步的绑定(bind)不会调用服务上的onBind()。我相信问题是服务直接在after_boot启动。当我不在启动时启动服务并让Activity使用Context.BIND_AUTO_CREATE启动它时,它确实按预期运行。我想到的唯一解决方案是更改服务的onUnbind()并在
我遇到了以下情况。我的应用程序中有一项服务。该Activity使用startService()启动它,以防止它在将来取消绑定(bind)时关闭。然后使用bindService()绑定(bind)到服务,稍后使用unbindService()解除绑定(bind)。一切正常,如预期的那样:调用onBind/onUnbind并且服务保持运行。但是当我从这个或另一个Activity中再次调用bindService()时,我得到了另一种行为:onBind和onRebind都没有被调用,但是onServiceConnected()仍然被调用并且我得到了在onBind()中返回的IBinder实现。
我正在尝试创建一个可绑定(bind)的粘性服务(我需要在后台对该服务持有的某些数据运行潜在的异步操作)。为此,我需要确保onBind始终在onStartCommand之后运行。有什么办法可以保证这一点? 最佳答案 根据您的要求,您可能不需要绑定(bind)到您的服务。然后使用IntentService就足够了,因为该服务将在其工作完成后自行停止。取自文档:IntentServiceisabaseclassforServicesthathandleasynchronousrequests(expressedasIntents)onde
我有一个远程服务,外部应用程序可以绑定(bind)到该服务。在某些情况下,我可能希望拒绝绑定(bind)。Accordingtothedocumentation,Returnthecommunicationchanneltotheservice.Mayreturnnullifclientscannotbindtotheservice.@OverridepublicIBinderonBind(finalIntentintent){returnnull;}返回null确实不返回IBinder对象并因此阻止连接,但是调用应用程序没有正确接收此“信息”。booleanbound=context
我在一个应用程序中有一个服务,我可以从不同的应用程序访问这个服务。当应用程序尝试绑定(bind)此服务时,我想知道哪个应用程序试图在onBind函数中绑定(bind)我的服务,但是我在onBind函数中无法获取此应用程序的包名或UID。是否可以在onBind函数中获取尝试绑定(bind)我的服务的应用程序名称或UID? 最佳答案 您可以使用以下方法来确定调用应用程序。StringcallingApp=context.getPackageManager().getNameForUid(Binder.getCallingUid());请
我有Activity和服务。Activity启动时,调用startService()使该Service即使在Activity被销毁的情况下仍处于Activity状态,并调用bindService()与该Service通信。bindService()返回true,mService.onBind()被调用,ServiceConnection.onServiceConnected()也被调用。所有作品。当我通过按返回键销毁我的Activity时,它会调用unbindService(),而我的mService.onUnbind()会被调用。(我在这个onUnbind()中返回false。)然后