2011-08-26 13 views
13

アプリケーションがどのコンポーネントからでも初期化されたときにサービスを開始したいと考えています。Application#onCreate()からサービスを開始できますか?

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startService(new Intent(getApplicationContext(), MyService.class)); 
    } 
} 

サービスはonCreate()状態で利用できますか? super.onCreate()は、AndroidManifest.xmlに登録されているアプリケーションのすべてのコンポーネントを初期化しますか?

私のギャラクシーでこのコードを実行できますが、すべてのデバイスとプラットフォームでこのコードが実行されることを確認できません。Android APPの初期化に関するドキュメントは見つかりません。

+0

このケースでは、サービスオブジェクトをApplication ...で取得する方法と、onBindが呼び出される場所から取得する方法はありますか? – aProgrammer

答えて

8

はい、このようにしてサービスを開始することができます。onCreate()ただし、サービスが正常に開始される保証はありません。サービスがデバイス上に存在し、実行可能であれば、サービスは正常に開始されます。 super.onCreate()は、アプリケーション内からサービスを開始するために必要な準備を行いません。 「サービスはonCreate()状態で利用可能ですか?」とはどういう意味ですか?

+0

サービスは私のアプリからのものなので、確かに存在します。 「サービスはonCreate()状態で利用可能ですか?」というのは、サービス#onCreate()(アクティビティ#onCreate()ではなく)でサービスを開始する準備が整っているかどうかです。 –

+1

サービスを開始する準備ができました。 onCreateは、サービスを開始する前に実行する必要はありません(つまり、onCreateはアプリケーションからサービスをロードするために必要なクラスローディングを行いません)。 –

0

簡潔に言えば、Context.startService()でもドキュメントが返され、nullを返すとサービスは利用できません。

サービスが開始されているか、すでに実行されている場合は、開始された実際のサービスの コンポーネント名が返されます。他 サービスがnull存在しない場合は

返されます。このAPIを使用すると、あなたが持っているエミュレータやデバイス上で発生しているもので自信を持つことができるので、デバイス間で変動するものではありません。 「多くの」リソースが必要なサービス(CPU時間やメモリなど)が異なることを覚えておく必要があります。

関連する問題