Service与AlarmManager-BroadcastReceiver能否在CPU沉睡下工作
2013-07-22 10:36
417 查看
项目中有两块需要用到这个
1 。 每隔5分钟定位一次位置,提交给接口
2.. 每隔5分钟提交一次代传记录,就是用户提交缓存在本地的数据
第一种方式:起初我用的Service,然后用的while 死循环,不断每隔5分钟 去执行一次
但是 有时候位置有时候很久不提交,特别是晚上,后来分析了一下, Service会随着cpu的休眠而沉睡
@Override
public void onCreate() {
super.onCreate();
customization=Customization.getInstance(this);
submittingThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
submitCardData(); //提交字符表
submitCardFileData();//提交文件表
Thread.sleep(5*60* 1000); // 5分钟执行一次提交
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}
);
submittingThread.start();
}
第二种方式:启动程序的时候 调用一下 startReceiver(),AlarmManager 能在cpu休眠的时候继续工作
public class SchedulePositionReceiverController {
String Tag="SchedulePositionReceiverController";
Activity activity;
private static SchedulePositionReceiverController instance;
public SchedulePositionReceiverController(Activity activity) {
this.activity=activity;
}
public static SchedulePositionReceiverController getInstance(Activity activity){
if(instance==null){
return new SchedulePositionReceiverController(activity);
}
return instance;
}
/***
* 启动Receiver
*/
public void startReceiver() {
//启动SubmitReceiver..0.....0
Intent intent =new Intent(activity,SchedulePositioningReceiver.class);
intent.setAction("SchedulePositioningReceiver");
PendingIntent sender=PendingIntent
.getBroadcast(activity, 0, intent, 0);
//开始时间
long firstime=SystemClock.elapsedRealtime();
AlarmManager am=(AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);//5分钟一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP , firstime,5*60*1000, sender);
Log.e(Tag, "Customization.getInstance(this).getSubmittingInterval()="+Customization.getInstance(activity).getSubmittingInterval());
}
/***
* 取消 Receiver
*/
public void cancelReceiver(){
Intent intent =new Intent(activity, SchedulePositioningReceiver.class);
intent.setAction("SchedulePositioningReceiver");
PendingIntent sender=PendingIntent.getBroadcast(activity, 0, intent, 0);
AlarmManager alarm=(AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(sender);
}
}
接受广播类
public class SchedulePositioningReceiver extends BroadcastReceiver {
String TAG = "SchedulePositioningReceiver";
Context context;
Thread positioningThread;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
mLocationClient = new LocationClient(context.getApplicationContext());
if (intent.getAction().equals("SchedulePositioningReceiver")) {
setLocationOption(); //提交位置代码 一些耗时工作,最好建一个Thread,BroadcastReceiver很容易超时,报无响应
}
}
1 。 每隔5分钟定位一次位置,提交给接口
2.. 每隔5分钟提交一次代传记录,就是用户提交缓存在本地的数据
第一种方式:起初我用的Service,然后用的while 死循环,不断每隔5分钟 去执行一次
但是 有时候位置有时候很久不提交,特别是晚上,后来分析了一下, Service会随着cpu的休眠而沉睡
@Override
public void onCreate() {
super.onCreate();
customization=Customization.getInstance(this);
submittingThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
submitCardData(); //提交字符表
submitCardFileData();//提交文件表
Thread.sleep(5*60* 1000); // 5分钟执行一次提交
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}
);
submittingThread.start();
}
第二种方式:启动程序的时候 调用一下 startReceiver(),AlarmManager 能在cpu休眠的时候继续工作
public class SchedulePositionReceiverController {
String Tag="SchedulePositionReceiverController";
Activity activity;
private static SchedulePositionReceiverController instance;
public SchedulePositionReceiverController(Activity activity) {
this.activity=activity;
}
public static SchedulePositionReceiverController getInstance(Activity activity){
if(instance==null){
return new SchedulePositionReceiverController(activity);
}
return instance;
}
/***
* 启动Receiver
*/
public void startReceiver() {
//启动SubmitReceiver..0.....0
Intent intent =new Intent(activity,SchedulePositioningReceiver.class);
intent.setAction("SchedulePositioningReceiver");
PendingIntent sender=PendingIntent
.getBroadcast(activity, 0, intent, 0);
//开始时间
long firstime=SystemClock.elapsedRealtime();
AlarmManager am=(AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);//5分钟一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP , firstime,5*60*1000, sender);
Log.e(Tag, "Customization.getInstance(this).getSubmittingInterval()="+Customization.getInstance(activity).getSubmittingInterval());
}
/***
* 取消 Receiver
*/
public void cancelReceiver(){
Intent intent =new Intent(activity, SchedulePositioningReceiver.class);
intent.setAction("SchedulePositioningReceiver");
PendingIntent sender=PendingIntent.getBroadcast(activity, 0, intent, 0);
AlarmManager alarm=(AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(sender);
}
}
接受广播类
public class SchedulePositioningReceiver extends BroadcastReceiver {
String TAG = "SchedulePositioningReceiver";
Context context;
Thread positioningThread;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
mLocationClient = new LocationClient(context.getApplicationContext());
if (intent.getAction().equals("SchedulePositioningReceiver")) {
setLocationOption(); //提交位置代码 一些耗时工作,最好建一个Thread,BroadcastReceiver很容易超时,报无响应
}
}
相关文章推荐
- Activity、BroadcastReceiver、Service共同工作的简单例子
- android下Service BroadcastReceiver与AlarmManager
- Android的Service与BroadcastReceiver之三 TelephonyManager、SmsManager、AudioManager、Vibrator、AlarmManager
- 8.1.3 在BroadcastReceiver中启动Service
- activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver解释
- Android第二讲——Intent、四大组件(Activity、BroadcastReceiver、ContentProvider、Service(IntentService))
- BroadcastReceiver+Service .开机启动服务
- Android Service 服务(二)—— BroadcastReceiver
- android音乐播放器实现(Service+BroadcastReceiver+Notification)
- 使用Service+BroadcastReceiver实现定时更新天气
- Android零基础开发专题五:Activity、BroadcastReceiver、Service、Content Provider
- Service两种不同的调用方式以及BroadcastReceiver两种不同的注册方式
- 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
- Service实时向Activity传递数据案例,,,,BroadcastReceiver中的数据传递给activity(2中注册方式广播)
- 关于android实现聊天: Service +BroadcastReceiver
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。
- android用服务service与广播broadcastreceiver创建开机启动服务
- 记一次在广播(BroadcastReceiver)或服务(Service)里弹窗的“完美”实践
- Android Service BroadcastReceiver