0

現在、Web サービス同期を使用して Android アプリケーションを開発しており、すべてがスムーズに機能していますが、データベースへのデータ取得のためにバックグラウンド更新サービスを作成する必要があります。ここ数日、私はこれを達成する方法についての情報を探していましたが、多くの解決策を見つけたので、かなり混乱しました。

httpClient を起動する asyncTask を使用してデータをフェッチし、応答を解析してデータベースに保存します。その後、Activity を起動するインテントを送信します。シンプルなもの。

アプリケーションが実行されていないときにデータをフェッチするサービスが必要です。ユーザーがアプリケーションを起動すると、おそらくサービスを停止します。

スレッドスリープを使用して Service クラスを作成することはできましたが、これはかなり悪い解決策のようです。

私が見つけた別の解決策は、pendingIntent とブロードキャスト レシーバーを使用することです。

ブロードキャスト インテントの送信が十分に安全かどうかはわかりません。誰かが自分の電話をデバッガーに接続すると、すべてのインテント ブロードキャストが表示されますよね? つまり、彼/彼女は私のアプリケーションを台無しにする可能性があります (実際にはそうではないのに、新しいデータがフェッチされたことをアプリケーションに通知するブロードキャスト インテントを送信するなど)。

また、システムによってサービスが強制終了されたくありません。

これに対する簡単で効果的な解決策はありますか?私は自分のニーズに合ったものを見つけるのに少し苦労しています。自分で書くのはAndroidプログラミングにかなり慣れていません。多くの解決策を見つけましたが、どれが「正しい」解決策であり、最も効果的であるかは本当にわかりません。

4

2 に答える 2

3

定期的なタスクをスケジュールするには、 AlarmaManagerを使用する必要があります。長時間稼働するサービスは必要ありません。スケジュールの保留中のインテントを実行するだけで、すべての実行が完了すると終了します。

于 2012-11-19T21:26:30.777 に答える
0

この目的のために、タイマーを使用できます。

public class ServiceCount extends CountDownTimer
{
    public ServiceCount(long millisInFuture, long countDownInterval)
    {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish()
    {
        // update data
    }

    @Override
    public void onTick(long millisUntilFinished)
    {
        Log.d("timer", "" + millisUntilFinished / 1000);
    }
}

ServiceCount count = new ServiceCount((long) (1 * 60 * 1000), 1000); // 1 minute
count.start();
于 2012-11-19T21:55:17.940 に答える