2012-11-17 11 views
5

質問:1 => 毎日午前9時から午後4時までサービスを実行したいと思います。私は2つの方法を計画しています。どれがベストですか?毎日午前9時から午後4時までサービスを実行するには?

方法1: インサイドサービス:(このサービスは時に初期化され、初めてアプリケーションの起動時にアクティビティの作成)

if (9 AM <=current time<=4 PM) 
{ 
    fetch data from server. 
} 

方法2: OnCreateの使用アラーム管理活動に

アラームマネージャーに基づいてサービスを開始します。その後、翌日起きてサービスを開始します。

どの方法が最適ですか?

質問:2 =>サービスが実行されているかどうかを確認するにはどうすればよいですか?

+0

Alarm Managerを使用して、午前9時にサービスを開始し、午後4時に終了します。そのAlarmManagerは、保留中のインテントを使用して翌日起床する必要があります。デバイスの再起動時にアプリケーションが起動することを確認してください。 –

答えて

1

ON_BOOTブロードキャストを受信するBroadcastRecieverを作成します(マニフェストに適切なアクセス許可とインテントフィルタを追加する必要があります)。 BroadcastReceiverは、Alarm Managerを使用して午前9時の通知を作成するためにのみ存在します。スケジュールされたアラームには、サービスを起動するPendingIntentがあります。明らかに、アラームを24時間ごとに繰り返すように設定してください。

起動すると、サービスは午後4時に正常に実行され、その時点でサービスは停止します。

サービスのonStartCommand()メソッドは、クラッシュまたは強制終了された場合にシステムに再起動させる適切なフラグを返す必要があります。

私が理解できない唯一のことは、初めてサービスがインストールされたときに自動起動する方法です。デバイスの再起動を待つことはあまり実用的ではありません。このようなアプリを書くと、通常、サービスを開始および停止するコントロールがあるアクティビティと組み合わされます。

+0

これで、起動時のブロードキャスト受信機にAlarm Managerを追加する必要があります。これは、アクティビティoncreateを追加するのではなく、このようにすると、アプリケーションのインストール後にアラームマネージャを設定するためにデバイスを再起動する必要があります。 – Ramprasad

+1

実際には、onCreate()アクティビティはより良い選択ですが、デバイスを再起動した後にサービスを自動的に再開するには、両方を行う必要があります。 –

関連する問題