2011-12-08 13 views
1

私のアプリの起動時にサービスを開始しようとしていますが、サービスを終了することを決定したときにサービスを再開する必要があります。彼は強制的にアプリを閉じることができますが、アプリの実行中はサービスの終了を防ぐ必要があります)。アプリケーションのonCreateでサービスを開始する

だから私は、Applicationクラスを拡張について行き、これは私がサービスを開始するためにやっているものです...

ServiceConnection conn = new ServiceConnection() { 
     public void onServiceConnected(ComponentName className, IBinder service) { 
      Log.d("start","ok"); 
     } 

     public void onServiceDisconnected(ComponentName className) { 
     } 
    }; 
    bindService(new Intent(this,DueService.class), conn, 0); 

これは、しかし、サービスを開始しません。しかし、startServiceを使用するとうまくいくようです。何か案は?

答えて

4

ApplicationbindService()を使用することは意味がありません。unbindService()に電話することはできません。

もちろん、アプリの他のコンポーネントが読み込まれただけでなく、積極的にユーザーに価値を提供している場合は、サービスがメモリに格納されていることをお勧めします。それは、あなたがApplicationからstartService()を使用するあなたの計画に合っているなら、あなたはこのサービスを漏らす方向に向かっています。ライフサイクルコンストラクトとして「アプリが実行されている」というAndroidの本質的なコンセプトはないため、サービスを停止する論理的な時間はありません。

ApplicationonTerminate()方法を有しているところで、それが呼ばれることはありません)

+0

ので、どのようにアプリ、その後、私は、サーバーからのライブデータをフェッチしておくことができ、そして私は、データをフェッチすることができない場合ことを、示唆しています正しく実行できません。だから私は2つのオプションが、いずれか、アプリがクラッシュするか、またはサービスを再起動します。 – Amit

+0

バインディングサービスなしでstartService(インテント)を意味するサービスを使用する場合の問題は何ですか? ? – Dharmendra

+0

@Amit:それぞれのアクティビティから 'bindService()'と 'unbindService()'を呼び出します。または、あなたのエントリーポイントアクティビティ(または、場合によっては 'Application')から' startService() 'を呼び出して、あなたのアクティビティがいつ来るかを追跡します。そうであれば' stopService() 'でサービスをシャットダウンできます。不要になりました。 – CommonsWare

関連する問題