使用AlarmManager的AsyncTask和Service时出错

时间:2014-07-15 08:30:33

标签: service android-asynctask broadcastreceiver alarmmanager

在服务上使用AsyncTask时遇到问题。重启手机后无法再次运行。

我的应用程序需要始终在后台运行GPS(来自手机)并发送到我的服务器。

我使用AlarmManager来设置重复功能X。

  • 功能X包括:

    • 任务A:获取数据(GPS)。

    • 任务B:使用网络连接将数据发布到我的服务器。

    • 任务B仅在任务A完成后才开始。

我使用OnBootReceiver将其设置为在后台运行并始终有效。

我的第一个工作流程是:

  1. OnBootReceiver呼叫服务。

  2. 服务调用AlarmManager。

  3. 间隔x小时后的AlarmManager将调用功能X.

  4. 功能X有一个AsyncTask

  5. Func X的一些代码:

    AsyncTask mAsyncTask = new AsyncTask(){         @覆盖         protected void onPreExecute(){             super.onPreExecute();             getLocation(context," gps.db");         }

        @Override
        protected Void doInBackground(Void... params) {             
            postLocation(context, "gps.db");                
            return null;
        }   
    };
    mAsyncTask.execute(null, null, null);
    
  6. 第二个工作流程是:

    1. OnBootReceiver调用AlarmManager。

    2. 间隔后,AlarmManager将创建一个服务。

    3. 服务将调用函数X。

    4. 功能X有一个AsyncTask

    5. 我必须使用AsyncTask并且Post函数位于onRunInBackground中,因为如果应用程序在很长一段时间后运行,android会杀死我的应用程序。

      - getData必须在UI线程上运行。

      - postData不能在UI线程上运行。

      请给我一个建议

1 个答案:

答案 0 :(得分:0)

Training for Android developers州:

  

默认情况下,设备关闭时会取消所有警报。为防止这种情况发生,您可以将应用程序设计为在用户重新启动设备时自动重新启动重复警报。这可确保AlarmManager将继续执行其任务,而无需用户手动重新启动警报。

你做过这个吗?