问题标签 [serviceconnection]
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 - Android 从服务加载列表视图项目导致挂起
在我的 Android 应用程序中,我有一个 ListActivity。这个 ListActivity 使用了一个 SimpleAdapter,我用我的服务中的项目填充了它。所以,在我的代码中,我这样做:
整个操作几乎不需要任何时间(不到一秒),所以我希望它在 UI 线程中运行。请参阅我的 onCreate:
我希望它在 UI 线程中运行的原因是,如果您选择了一个列表项,或者您已经滚动到 ListView 中的某个位置,并且您旋转设备或取出键盘或其他东西(触发配置更改)当我的活动重新启动时,Android 将尝试在 onCreate 之后立即恢复状态。但是,如果我在单独的线程中运行它,它不会。还有一个很酷的淡入淡出动画 :)
我在 UI 线程中运行它时遇到的问题是,当我尝试绑定到服务时,该服务绑定请求被放入消息队列中。但是当我进入我的循环时,我停止了消息队列的循环。所以我的程序挂起,因为它正在等待服务被绑定,并且服务在循环结束之前不会被绑定。我想过放Looper.loop()
在我的循环中,但这只是挂在Looper.loop()
(我不知道为什么。)
抱歉这么长的问题,
艾萨克沃勒
android - 活动已泄露 ServiceConnection@438030a8 最初绑定在这里
我正在开发我的第一个 Android 应用程序。我的应用程序中有三个活动,用户经常来回切换。我还有一个远程服务,它处理远程登录连接。应用程序需要绑定到此服务才能发送/接收 telnet 消息。
编辑
感谢 BDLS 提供的信息丰富的回答。bindService()
根据您对用作独立函数或 after之间区别的说明,我已经重新编写了我的代码,startService()
现在我只在使用后退按钮在活动之间循环时间歇性地收到泄漏错误消息。
我的连接活动有以下onCreate()
和onDestroy()
:
因此,服务在活动启动时启动,如果没有成功的 telnet 连接,则在活动被销毁时停止(connectStatus == 0
)。其他活动仅在成功连接时才绑定到服务(connectStatus == 1
保存到共享首选项)。这是他们的onResume()
and onDestroy()
:
因此,绑定发生在onResume()
它会从连接活动中获取更改的状态,并且在onDestroy()
函数中它是未绑定的,如果需要的话。
结束编辑
但是我仍然在切换活动时间歇性地收到内存泄漏错误消息“Activity has leaked ServiceConnection @438030a8 that original bound here”。我究竟做错了什么?
在此先感谢您的任何提示或指示!!!
完整的错误消息如下(来自修改后的代码):
编辑第二
次再次感谢您的建议。我按照你的建议做了,并为onUnBind()
服务添加了一个覆盖。 onUnBind()
实际上只有在所有客户端与服务断开连接时才会触发,但是当我点击主页按钮时,它执行了,然后弹出错误消息!这对我来说毫无意义,因为所有客户端都已与服务解除绑定,那么被破坏的客户端怎么会泄漏 serviceConnection?一探究竟:
我认为这可能就像您说的那样,在unbindService()
调用时绑定到服务不完整,但是我尝试在服务上调用一个方法,因为我支持每个活动以验证绑定是否完成,它们都去了通过罚款。
一般来说,这种行为似乎与我在每项活动中停留的时间无关。但是,一旦第一个活动泄漏了它的 serviceConnection,它们都会像我之后通过它们返回的那样做。
另一件事,如果我在开发工具中打开“立即销毁活动”,它可以防止这个错误。
有任何想法吗?
java - 用于 ServiceConnection 回调的线程 (Android)
我正在开发一个绑定到本地服务的活动(在活动的 onCreate 中):
我希望能够在我的生命周期方法中通过 IBinder 调用方法,但不能确定在这些方法之前已经调用了 onServiceConnected。我正在考虑通过在 ServiceConnection 实现中添加一个排序队列来处理这个问题,以便在建立连接后执行方法调用(命令模式)。
我的问题是:
- 这是愚蠢的,有更好的方法吗?:)
- 是否有任何关于哪个线程将用于执行 ServiceConnection 回调的规范?更重要的是,我是否需要担心同步队列数据结构?
编辑 - 类似:
android - Android如何等到服务实际连接?
我有一个调用 IDownloaderService.aidl 中定义的服务的活动:
在 Downloader.onCreate(Bundle) 我试图 bindService
在 ServiceConnection 对象 sc 中我这样做了
通过添加各种 Log.xx 我发现 if(bindService(...)) 之后的代码实际上是在调用 ServiceConnection.onServiceConnected 之前 - 也就是说,当下载器仍然为空时 - 这让我遇到了麻烦。ApiDemos 中的所有示例都通过仅在用户操作触发时调用服务来避免此时间问题。但是在bindService成功后我应该怎么做才能正确使用这个服务呢?如何等待 ServiceConnection.onServiceConnected 被可靠调用?
另一个相关的问题。所有的事件处理程序:Activity.onCreate、任何 View.onClickListener.onClick、ServiceConnection.onServiceConnected 等是否实际上在同一个线程中调用(在文档中称为“主线程”)?它们之间是否存在交错,或者 Android 会安排所有事件一一处理?或者,实际上何时调用 ServiceConnection.onServiceConnected?在 Activity.onCreate 完成后或 A.oC 仍在运行时?
android - 我需要为 Android 服务调用 unbindService 和 stopService 吗?
在我的 Android 应用程序中,我同时调用了startService
and bindService
:
后来,我尝试同时unbindService and
停止服务:
但是,我在调用unbindService
. 如果我删除此呼叫,则该应用程序似乎可以通过stopService
呼叫正常运行。
难道我做错了什么?我认为bindService
呼叫必须与unbindService
呼叫相关联,startService
呼叫必须与stopService
呼叫相关联。不过,这里的情况似乎并非如此。
android - 设置 IMediaPlaybackService
我在使用IMediaPlaybackService
Android 时遇到问题。有人告诉我,我需要做的就是将它放入它的包中(在本例中为com.android.music
),但是当我这样做时,我无法构建我的项目。IMediaPlaybackService 的代码如下:
但是,似乎有几个问题阻止我使用此文件构建我的项目:
- “in”关键字导致 Eclipse 出错。确切的错误是:
Syntax error on token "long", delete this token.
我不确定为什么那里有“in”关键字。它们似乎不是 Java 中的关键字,它们是什么? - 发生的另一个错误是
The type com.android.music.IMediaPlaybackService is not visible
,可以通过公开接口来解决。 - 最后一个错误是
Stub cannot be resolved or is not a field.
当我执行这行代码时:this.mService = IMediaPlaybackService.Stub.asInterface(service);
因为 IMediaPlaybackService 中没有 Stub。
其他人似乎已经能够轻松克服这些问题,那么我错过了什么?这可能是我没有看到的简单事情,但我一直在努力解决这个问题的时间比我应该做的要长。我需要弄乱我的项目设置吗?
所以我已经能够构建我的项目,但现在我遇到了服务本身的问题。这是我的 MediaPlayerServiceConnection 类的代码:
...这是绑定服务的活动中的代码,但未调用 onServiceConnected 方法,我是否错误地尝试使用该服务?
java - Android ProgressDialog 不会旋转
这是我的第一个 stackoverflow 帖子,所以请对我温柔一点!我确信我正在尝试做的事情是可能的,并且是我已经做过(或没有做过?)的事情导致了问题......我只是不确定那是什么。
我正在尝试做的事情:
在我的应用程序同步和处理下载的数据时显示 ProgressDialog。
问题:
ProgressDialog 显示但不旋转(这使它看起来像已冻结),同步和处理发生,ProgressDialog 关闭,应用程序正常继续。
我目前如何做到这一点:
创建一个 ProgressDialog - 在我的活动
中进行同步 - 在我的服务中
处理数据 - 在我的服务中
Dismis the ProgressDialog - 在我的活动中
我尝试过的事情:
使用线程(下面的代码)使用AsynTask(如果需要可以提供代码)使用处理程序(如果需要可以提供代码)
在花了很多时间寻找我的问题的答案之后,似乎其他人也遇到了相同或相似的问题,并设法使用上述想法之一解决了它。但是,我无法实施任何这些想法来解决我的特定问题。这让我确定这是我做错的事情......我只是不确定是什么。
我编写并用作所有尝试修复的基础的原始代码:
首先
然后
所以现在我假设 doBind 发生在不同的线程中,使 UI 线程除了显示 ProgressDialogue 之外无事可做......?
如果您需要任何进一步的信息来帮助我解决这个问题,请告诉我。
编辑:
这是我用来代替处理程序的代码。这显示与以前相同的行为(微调器不旋转)。
.
.
android - 通过方向更改在 Android 中维护 ServiceConnection
我有一个包含服务连接的活动。当方向改变时,ServiceConnection 似乎会丢失并重新创建。
这是不可取的。我希望通过重新创建 Activity 来维护 ServiceConnection。我正在寻找一个很好的模式来解决这个问题。
android - 在 AlertDialog 中启动服务并绑定外部 Activity
首先,我尝试搜索此 ans 未成功。如果我的问题已经回答了,有人可以指点我吗?非常感谢您通过查看此内容来帮助我,甚至浏览此内容并为我指明正确的方向。我真的很感激!
我的困境:我有一个活动,在那个活动中有列表视图。列表视图中有多个项目,其中最需要调用 AlertDialog。AlertDialog 调用一个服务,该服务说:“嘿,你需要更新一些数据。” 服务侦听并成功更新。
发挥作用的问题是我的活动不承认该服务。我想知道的是,我不完全了解服务的运作方式,以及您是否可以多次启动/运行相同的服务。
请注意,我的示例与The Android Dev Reference for Service的想法有些关联。
这个例子:
刷新连接器:
更新服务
DescriptionDialog 被截断(构造函数),此外,这是从 AlertDialog.Builder 类扩展而来的。我还有一个在所有对话框中都很常见的类,基本上我存储_context。所以在这里的情况下,上下文保存在super.xml中。_context 受保护...
同样,请注意在弹出窗口发生之前发生的绑定。2、注意我在绑定中启动服务。我做错了什么或只是没有得到?
再次感谢大家,凯利
android - Android 应用、SMS/文本转语音(已泄露 serviceConnection)
我有这个应用程序监听传入的消息并大声朗读它们。问题是我退出时出现以下错误
12-21 15:45:29.949: E/ActivityThread(566): Activity mo.rach.collaboration.speaker 泄露了原本绑定在这里的 ServiceConnection android.speech.tts.TextToSpeech$Connection@41397858
我基本上希望它在后台运行,这样如果应用程序关闭,消息仍然会被大声朗读。我真的需要在 9 号回到大学之前弄清楚这一点,因为这是该项目的交接日期。
短信接收器.java
扬声器.java