Android服务每10秒运行一次

时间:2012-09-04 08:16:09

标签: android

我有一个Android应用程序,其中包含一个向用户显示信息的主要活动。 当主活动开始时,将创建一个服务,该服务每10秒检查一次Web服务 - 如果WS返回应答,则弹出通知。主要活动和服务之间没有任何联系(除了我希望它们一起开始)。问题是,激活工作真的很慢 - 因为服务正在运行。

我该如何解决?我尝试使用IntentService,但他在10秒后死亡。

我正在使用的代码:

@Override
public void onCreate() {    

super.onCreate();
context = this.getApplicationContext();
mPeriodicEventHandler = new Handler();
mPeriodicEventHandler.postDelayed(doPeriodicTask, PERIODIC_EVENT_TIMEOUT); 
}

private Runnable doPeriodicTask = new Runnable()
{
    public void run() 
    {
        NotificationServices.Notification();
        mPeriodicEventHandler.postDelayed(doPeriodicTask, PERIODIC_EVENT_TIMEOUT);
    }
 };

4 个答案:

答案 0 :(得分:0)

而不是轮询我建议您使用GCM,即c2dm,这是c2dm设计的场景......

供参考检查这些链接,你肯定会喜欢使用这个

http://developer.android.com/guide/google/gcm/index.html

答案 1 :(得分:0)

您的处理程序正在主UI线程中执行任务,这可能会影响您的活动的UI,甚至会导致ANR。

我建议创建一个新的HandlerThread并在那里发布你的任务。

但是,请确保您确实希望每10秒钟提取一次数据。移动互联网和设备耗电成本很高。

考虑使用Persistent ConnectionGoogle Cloud Messaging

答案 2 :(得分:0)

使用Handler我们可以做到这一点

final Handler handler = new Handler();
        Runnable r = new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                handler.postDelayed(r, 10000);
            }
        };
        handler.postDelayed(r, 0);

答案 3 :(得分:0)

API Demos中引用Foreground Service Controller示例,并在更新webservice时更新待处理事件。

另请考虑使用Asynctask

我希望这会有所帮助:)