2011-12-16 4 views
0

Androidモバイルで24 * 7を実行し、開始時に&のバックグラウンドサービスを実行する必要があります。モバイル低バッテリーで1時間ごとにWebサービスを起動します。あなたは私にあらゆるアプローチをお勧めしますか?私はいくつかの記事を読んでみましたが、何も考えていませんでした。私はここで何かを試した後にコードを貼り付ける必要があることを知っていますしかし、私は何の手がかりも得ていませんでした。アプローチ方法を教えてください。Androidでのサービス要件のアプローチ

答えて

1

おそらくhereを述べたように、あなたのServiceを殺してからシステムを防ぐための方法startForeground(int id, Notification notification)を使用する必要があります:

AサービスがAでサービスを置くためにstartForeground(int型、通知)APIを使用することができます開始システムはそれをユーザが積極的に認識しているものとみなし、したがってメモリが不足している場合には殺害の候補とはみなされない。 (理論的には、現在のフォアグラウンドアプリケーションからの極端なメモリ圧でサービスが強制終了される可能性はありますが、実際にはこれは問題ではありません)。

実行するには何らかの種類のスケジュールされたタスクが必要です毎時。 ScheduledThreadPoolExecutorのようなものは、方法scheduleAtFixedRate (Runnable command, long initialDelay, long period, TimeUnit unit)を使用して、この目的には理想的です。各時間を実行する必要が

タスクがRunnableとして実装し、あなたのScheduledThreadPoolExecutorに提出しなければならない:

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); 
executor.scheduleAtFixedRate(new MyRunnableTask(), 0, 1, TimeUnit.HOURS); 

Runnableタスクのようなものでなければなりません:

private class MyRunnableTask implements Runnable { 
    public void run() { 
    //Do what needs to be done. 

} 
0

I 24 * 7を実行するAndroidモバイルでバックグラウンドサービスを実行する必要があります。

しないでください。初心者にとっては不可能です。

サービスは、価値のないシステムリソース(RAMなど)を抱えているため、ユーザーは「実行24 * 7」のサービスについて大声でよく訴えます。その結果、サードパーティのタスクキラーと[設定]の[強制停止]オプションの間で、ユーザーはそのようなサービスを取り除きます。彼らがそうしたとき、特にAndroid 3.1以降では、アプリケーションは、ランチャーからあなたの活動を手動で起動するまで、に再び実行されません。

あまりにも多くの開発者がサービス管理にあまりにもふさわしくないため、Android自体がこのようなサービスを排除します。

開始時に&モバイル低電力で1時間ごとにWebサービスを起動します。

このリストに基づいて、「24 * 7を実行するAndroidモバイルのバックグラウンドサービス」は必要ありません。あなたは仕事を実行する必要があります。デバイスのバッテリーが少ないとき

  • デバイスが
  • 起動時
  • デバイスはACTION_BOOT_COMPLETED放送によって起動時に

は見つけることができるすべての時間IntentACTION_BATTERY_LOWブロードキャストIntentを介してデバイスのバッテリの残量を確認することができます。 AlarmManagerを介して時間が経過すると、独自のアラームスケジュールを設定することができます(たとえば、1時間ごとなど)。

これら3つのトリガーはいずれも、IntentServicestartService()を呼び出す必要があります。 IntentServiceを使用すると、内蔵のバックグラウンドスレッドを使用して「Webサービスにヒットする」ことができます。そして、その作業が完了すると、IntentServiceになるので、常にメモリを使い果たしているわけではありません。

また、1時間ごとの状態でデバイスをスリープモードから復帰させたい場合、おそらく私のWakefulIntentServiceのようなものを使用する必要があります。それ以外の場合は、デバイスがスリープモードから " Webサービスにヒットします。

このようにして、お客様のサービスは稼働しており、のリソースは積極的にユーザーに提供していますが、です。他の何らかのイベントが発生するのを単に待っているとき(例えば、次の59分間)には、リソースが稼働していない。

関連する問題