2

サービスを自分のアクティビティにバインドしようとしていますが、このコードが実行された後の何らかの理由で:

new Thread(new Runnable() {
    public void run() {
        httpdIntent = new Intent(MainActivity.this, HttpdService.class);
            bindService(httpdIntent, mConnection, Context.BIND_AUTO_CREATE);
        }
    }).start();

他に何も起こりません。例外はありませんが、onCreate メソッドが想定どおりに呼び出されません。これがどのように機能するかを誤解しているかもしれませんが、このスレッドが実行された後、すぐにサービスを作成する必要があると思いました。これは正しくありませんか?アドバイスをいただければ幸いです。

4

1 に答える 1

8

サービスがバインドされるとonBind()、サービスではなく、サービスのメソッドが呼び出されonCreate()ます。バインドされたサービスのライフサイクルを示すこの画像を確認してください ( docsから取得):

ここに画像の説明を入力

実際、onCreateサービスのメソッドを呼び出す唯一の方法は、メソッドを使用して呼び出すことstartService()です。ここのドキュメントによると:

誰かが Context.startService() を呼び出すと、システムはサービスを取得し (サービスを作成し、必要に応じて onCreate() メソッドを呼び出します)、クライアントから提供された引数を使用して onStartCommand(Intent, int, int) メソッドを呼び出します。


いずれにせよ、サービスを呼び出したい場合は、onCreate()バインドする前にサービスを開始するだけです。

Intent startIntent = new Intent(this, MyService.class);
startService(startIntent);
bindService(startIntent, mConnection, Context.BIND_AUTO_CREATE);
于 2013-07-20T01:43:40.070 に答える