4

私はまだAndroidサービスクラスに少し慣れていません。startService(intent) を使用してアプリケーションからサービスを開始する必要があることはわかっていますが、私の問題は、サービスにメソッドが含まれていることです。インテントを使用してサービスを開始し、Activity でそのクラスのオブジェクトを作成して、サービスのメソッドを呼び出せるようにする必要があります。問題は、これを行うと、インテントでサービスを開始するときにサービスのインスタンスを 1 つ作成し、アクティビティでクラスのオブジェクトを作成するときにサービスの別のインスタンスを作成することです。これは、サービスのオブジェクトを作成するときに、startService(intent) からサービスに渡されたデータが存在しないことを意味します。これを回避する方法はありますか、それともサービスクラスを完全に誤用していますか? 私はいくつかのコードを与えることができますが、基本的にはこれです:

//Create Object of ControlPanel service class.
ControlPanel cPanel = new ControlPanel();
//Create intent for starting ControlPanel service class
Intent controlPanel = new Intent(this, cPanel.getClass());
//Start Service
startService(controlPanel);
4

3 に答える 3

18

クラスを誤用していると思います:-)。

startService() を複数回呼び出しても、複数のサービスが開始されるわけではありません。

ドキュメントから:

特定のアプリケーション サービスの開始を要求します。Intent には、開始する特定のサービス実装の完全なクラス名を含めるか、開始するサービスの種類のアクションおよびその他のフィールドによる抽象定義を含めることができます。このサービスがまだ実行されていない場合は、インスタンス化されて開始されます (必要に応じてプロセスを作成します)。実行中の場合は、実行中のままです。

onStartCommand()もオーバーライドする必要があります。サービスがまだ開始されていない場合は、最初の startService 呼び出しでサービスが開始されます。いずれにせよ、onStartCommand は、それ以降の startService 呼び出しと、それに送信するインテントをインターセプトします。

于 2013-04-10T16:36:50.030 に答える
-8

これは、1 つのサービス クラスで実行できます。

public static int myStaticMethod(){
        return 1;
    }

アクセスに必要なメソッドを静的にするだけです。

于 2015-09-27T00:23:30.173 に答える