安卓调度任务
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
。但我无法将locationManager
和locationListener
从活动发送到服务。
最后,我使用AsyncTask
在doInbackground
中创建一个循环来一直运行。如果时间是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
【讨论】:
以上是关于安卓调度任务的主要内容,如果未能解决你的问题,请参考以下文章