0

onCreate() でサービスを開始し (onCreate が初めて呼び出された場合)、onStart() で bindService を呼び出します。サービスはおそらく機能しますが、bindService を呼び出した後、サービスのローカル インスタンスはまだ null です。さらに、getService() が呼び出されていないようです。ここにいくつかのコードがあります:

@Override
protected void onCreate(Bundle savedInstanceState) {
...
if(savedInstanceState == null){
   final Intent i = new Intent(this, HostService.class);
   startService(i);
}

}

protected void onStart(){
    super.onStart();
    bindService(new Intent(this, StartGameActivity.class), connection, Context.BIND_AUTO_CREATE);
}

private ServiceConnection connection = new ServiceConnection(){

    @Override
    public void onServiceConnected(ComponentName arg0, IBinder arg1) {
        HostBinder binder = (HostBinder) arg1;
        hostService = binder.getService();
        isBound = true;
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        isBound = false;
    }

};

および HostService で:

...
private HostBinder binder = new HostBinder();
...
public class HostBinder extends Binder{
    HostService getService(){
        Log.d(TAG, "getService");
        return HostService.this;
    }
}

@Override
public IBinder onBind(Intent arg0) {
    return binder;
}

onStart() が呼び出された後でも hostService が null のままであるのはなぜですか? また、getService が呼び出されないのはなぜですか (「getService」は LogCat に出力されません)。

thx&よろしく

4

1 に答える 1

0

呼び出す必要はありませんstartService()。によって開始されbindService()ます。

onStart()メソッドでは、StartGameActivity.classを起動するインテントを作成しています。それはあなたが望んでいたことですか、それともHostService.classを起動するつもりでしたか?

どちらもあなたの問題でない場合は、さらに先に進む必要があります。onServiceConnected()andメソッド内にロギング ステートメントを入れて、onBind()それらが確実に呼び出されるようにすることはできますか?

興味深い logcat メッセージはありますか?

バインダーまたはメッセージングを介してサービスと通信していますか?

于 2013-05-02T20:02:10.183 に答える