正确的Android更新服务方式

时间:2012-11-19 21:18:19

标签: android android-intent android-service

我目前正在使用webservice同步开发Android应用程序,一切都运行顺利,但我需要创建一个后台更新服务,用于数据获取到数据库。最近几天,我一直在寻找如何实现这一目标的信息,我找到了许多解决方案,这让我非常困惑。

我使用asyncTask获取数据,它启动httpClient和I解析响应并将其保存到数据库。之后,我发送了一个意图来启动一个活动。简单的东西。

我想要一个服务,它会在应用程序未运行时获取数据。当用户启动应用程序时,可能会停止服务。

我设法用线程休眠写一个Service类,但这似乎是一个非常糟糕的解决方案。

我发现的另一个解决方案是使用pendingIntent和广播接收器。

我不确定发送广播意图是否足够安全。如果有人将他的手机插入调试器,他会看到每个意图广播,对吗?这意味着他/她可能会弄乱我的应用程序(比如发送广播意图,这会告知应用程序新数据已被提取,而实际上并非如此)。

我也不想让我的服务被系统杀死。

有没有简单有效的解决方案?我很难找到适合我需要的东西,而且我对Android编程很新,我自己编写。我找到了很多解决方案,但我真的不知道哪一个是“正确”的解决方案,这是最有效的。

2 个答案:

答案 0 :(得分:3)

您应该使用AlarmaManager来安排定期任务。无需长时间运行服务。它只执行计划挂起的意图,并在所有执行完成后完成。

答案 1 :(得分:0)

为此,您可以使用Timer:

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();