2

私は自分の活動に結びつけようとしている非常に単純なローカルサービスを持っています。私は昨日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

4

1 に答える 1

2

this内部の参照doBindServiceは、どちらの場合も同じではありません。で呼び出された場合は、ボタンをクリックして呼び出されonCreateた場合の参照になります。明らかに、ボタンクリックリスナーにサービスをバインドする必要はありません。ActivityOnClickListener

に変更thisしてみてYOURACTIVITYNAME.this、それが役立つかどうかを確認してください。

于 2010-09-02T16:24:44.210 に答える