【问题标题】:calling a method from android service immediately after it's bound on onCreate在绑定 onCreate 后立即从 android 服务调用方法
【发布时间】:2010-09-03 15:27:15
【问题描述】:

我很确定 android 服务将是我的终结。最近几天我几乎没有头发了....

...无论如何,我离题了。

起初,我很想通过单击按钮来绑定服务,昨天从这里的帮助中解决了这个问题。现在我实际上希望服务绑定在活动的 onCreate() 方法中。那部分没问题,按预期工作。我的服务实际上是一个套接字服务,用于将 TCP 套接字连接到我编写的套接字服务器。如果我将绑定服务 mBoundService.StartSocketServer() 中的方法调用放在按钮单击中,宾果游戏效果很好。但是我需要在活动加载时立即启动它,因此直接在活动的 onCreate() 方法中的 bindService() 调用下。当我在 onCreate() 中调用启动套接字时,我会强制关闭。

此方法 (StartSocketServer()) 生成一个新线程,然后打开该线程上的套接字到我的远程计算机。我猜问题出在活动完全加载之前的新线程生成...不确定。

LogCat 在这里相当神秘。它确实说明了线程附加失败,然后显示了一个未捕获的处理程序异常,其中包含“Caused by: java.lang.NullPointerException”。

再次,如果我在按钮单击中将此方法调用,我在做生意,如果它在 onCreate() 中失败。在活动中是否有某种方式(假设我的假设是正确的需要在生成新线程之前完全加载)在加载后调用 StartSocketServer():ala body.onLoad() in html?

请帮我保存我剩下的头发:)

TIA

【问题讨论】:

    标签: android service oncreate


    【解决方案1】:

    正如我在您的earlier question 中所写:

    FWIW,bindService() 是异步的。在 onServiceConnected() 之前,您不会有绑定连接 调用您的 ServiceConnection。

    在您的bindService() 调用中,您提供了一个ServiceConnection 对象。当服务准备好使用时,将使用onServiceConnected() 调用该对象。除其他外,这可能是您填充mService 的地方。将您的电话转至onServiceConnected() 中的StartSocketServer()

    【讨论】:

    • 很好,修复了它。正如我在您引用的上一篇文章中所说,我不太了解异步的事情。您能否对此进行更多说明?为什么在通过活动的 onCreate 调用 mBoundService.StartSocketServer() 创建 mBoundService 后(在 ServiceConnection->onServiceConnected 内)它不起作用?那个时候服务不是绑定的吗?
    • @Kyle:bindService() 是异步的。当bindService() 返回时,您的服务未绑定。异步意味着“不会立即发生”。或者,引用维基百科,“在编程中,异步事件是独立于主程序流发生的事件。异步动作是在非阻塞方案中执行的动作,允许主程序流继续处理。”异步操作在大多数现代编程环境中都很常见。
    • 我明白了。再次感谢您的特殊帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多