安卓调度任务

Posted

技术标签:

【中文标题】安卓调度任务【英文标题】:android schedule task 【发布时间】:2012-05-05 17:06:19 【问题描述】:

我有一个任务。

6:00 register locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                0, 0, locationListener);<br>
19:00 unregister locationManager.removeUpdates(locationListener);

首先,我想使用服务,AlarmManager。但我无法将locationManagerlocationListener 从活动发送到服务。

最后,我使用AsyncTaskdoInbackground 中创建一个循环来一直运行。如果时间是6:00或者19:00,注册或者注销locationManager。

 protected Object doInBackground(Object... params) 
    Calendar calendar = Calendar.getInstance();
    while(flag) 
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 19);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);

        long now = System.currentTimeMillis();
        if(calendar.getTime().getTime() - now < 1000) 
            publishProgress(new Message(Message.REMOVE_LOCATION_MANAGER));
        

        calendar.set(Calendar.HOUR_OF_DAY, 6);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        now = System.currentTimeMillis();
        if(calendar.getTime().getTime() - now < 1000) 
            publishProgress(new Message(Message.REGISTER_LOCATION_MANAGER));
        
    
    return null;

 protected void onProgressUpdate(Object... values) 
    super.onProgressUpdate(values);

    Message msg = (Message)values[0];
    if(msg.type == Message.REMOVE_LOCATION_MANAGER) 
        lm.removeUpdates(ll);
        Toast.makeText(context, "remove locationManager", Toast.LENGTH_SHORT).show();
    

    if(msg.type == Message.REGISTER_LOCATION_MANAGER) 
        lm.removeUpdates(ll);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                0, 0, ll);
        Toast.makeText(context, "register locationManager", Toast.LENGTH_SHORT).show();
    

谁有更好的日程安排方法,谢谢。

【问题讨论】:

【参考方案1】:

直接回答您的问题是没有意义的,您必须重新考虑您的应用程序,因为在早上 6 点到晚上 19​​ 点运行 GPS 时,没有任何 android 设备可以在一次电池充电的情况下存活。

基本上,您必须仅在真正需要时才请求 GPS 位置更新。这是一篇由 Android Guru Reto Meyer 撰写的关于获取位置更新的好文章:http://android-developers.blogspot.jp/2011/06/deep-dive-into-location.html

【讨论】:

以上是关于安卓调度任务的主要内容,如果未能解决你的问题,请参考以下文章

在uc/os-ii上进行多任务的调度,设置三个任务,任务一代码中使用了while(1)成为死循环,如何跳出它?急

CELERY 定时任务

.NET 任务调度

【leetcode】任务调度器

linux 任务调度 系统任务调度

Laravel 计划任务(任务调度)的使用