【问题标题】:bindService not working inside a button click but works in onCreate - androidbindService 在按钮单击中不起作用,但在 onCreate 中起作用 - android
【发布时间】:2010-09-02 16:09:06
【问题描述】:

我有一个非常简单的本地服务,我正在尝试绑定到我的活动。我昨天与 CommonsWare 一起解决了这个问题,他让我理顺了,因为我很难让服务绑定。事实证明,我遇到这么多麻烦的原因是我试图将服务绑定到:

bindService(new Intent(this, myService.class), mConnection, Context.BIND_AUTO_CREATE);

在单击按钮后调用的 void 方法中。

private void doBindService() {
            bindService(new Intent(this, SimpleService.class), mConnection, Context.BIND_AUTO_CREATE);
            mIsBound = true;
        }

       private OnClickListener startListener = new OnClickListener() {
        public void onClick(View v){
            doBindService();
        }               
       };

当我将 bindService() 调用移至活动的 onCreate 方法时,它工作正常。 CommonsWare 提到了一些关于该调用是异步的,我对 android 活动创建知之甚少,不知道这是否是我的问题。我知道当我点击按钮时我的 onServiceConnection() 在我的 ServiceConnection() 中被调用,当我尝试访问服务内的成员时我的 mBoundService 将不起作用。

谁能告诉我为什么它在按钮点击中不起作用,但在 onCreate() 中起作用?

TIA

【问题讨论】:

    标签: android binding service oncreate


    【解决方案1】:

    doBindService 内部的 this 引用在两种情况下都不相同。如果在onCreate 中调用,它将是对Activity 的引用,如果从按钮单击调用,它将是对OnClickListener 的引用。显然你不希望你的服务绑定到按钮点击监听器。

    尝试将this 更改为YOURACTIVITYNAME.this,看看是否有帮助。

    【讨论】:

    • @chris324 - 感谢您的回复,但如果您仔细看,bindService() 会从一个 void 方法调用,该方法是从单击调用的活动类的一部分。因此,出于所有意图和目的,“this”指的是活动,不是吗?
    • 不,函数在哪里定义并不重要。它是从不同的类调用的,因此 this 将指向它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2018-11-10
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多