Android程序定时上传数据运行一个小时左右就不上传数据了 已经定时点亮屏幕唤醒CPU了 这是android机制的
答案:1 悬赏:60 手机版
解决时间 2021-02-14 16:51
- 提问者网友:藍了天白赴美
- 2021-02-14 08:42
Android定时上传数据,但是在一个小时之后就不上传数据了,程序 已经定时点亮屏幕唤醒CPU了,这是android机制的缘故吗?还是因为什么呢?
最佳答案
- 五星知识达人网友:过活
- 2021-02-14 08:53
这种我刚做过类似的,后台服务自动定时上传位置,锁屏状态连续工作10小时,每分钟上传一次。不用保持唤醒状态和点亮屏幕,非常省电。
主要思路就是用闹钟管理器来保持一个repeat的PendingIntent。
这种办法,不惧怕系统休眠,不需要保持唤醒。
private void _startAutoUpdateAlarm(){
boolean autoUpdate = AppPreference.getAutoUpdate(this);
boolean isIntervalMinValid = AppPreference.isIntervalMinValid(this);
if(autoUpdate&&isIntervalMinValid&&null==_pendingIntent){
Utils.amLog("make repeat");
_pendingIntent = PendingIntent.getService(TraceService.this, 0,
new Intent(TraceService.this, TraceService.class),
Intent.FLAG_ACTIVITY_NEW_TASK);
_alarmManager.cancel(_pendingIntent);
long now = System.currentTimeMillis();
long intervalMillis = 60*1000*AppPreference.getIntervalMin(this);
_alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, now, intervalMillis, _pendingIntent);
_autoUpdateOn = true;
}else{
Utils.amLog("do not make repeat");
if(null==_pendingIntent){
_pendingIntent = PendingIntent.getService(TraceService.this, 0,
new Intent(TraceService.this, TraceService.class)
, Intent.FLAG_ACTIVITY_NEW_TASK);
}
_alarmManager.cancel(_pendingIntent);
_pendingIntent = null;
_autoUpdateOn = false;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(null==intent){
return super.onStartCommand(intent, flags, startId);
}
Utils.amLog("onStartCommand flags:"+intent.getFlags());
//当服务被后台(Alarm服务)调用时,上传位置
if(Intent.FLAG_FROM_BACKGROUND==intent.getFlags()){
_checkAndUpdateLocation();
}
return START_STICKY;
}
如果你需要进一步的细节的话,留个邮箱窝把这个服务的代码给你
主要思路就是用闹钟管理器来保持一个repeat的PendingIntent。
这种办法,不惧怕系统休眠,不需要保持唤醒。
private void _startAutoUpdateAlarm(){
boolean autoUpdate = AppPreference.getAutoUpdate(this);
boolean isIntervalMinValid = AppPreference.isIntervalMinValid(this);
if(autoUpdate&&isIntervalMinValid&&null==_pendingIntent){
Utils.amLog("make repeat");
_pendingIntent = PendingIntent.getService(TraceService.this, 0,
new Intent(TraceService.this, TraceService.class),
Intent.FLAG_ACTIVITY_NEW_TASK);
_alarmManager.cancel(_pendingIntent);
long now = System.currentTimeMillis();
long intervalMillis = 60*1000*AppPreference.getIntervalMin(this);
_alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, now, intervalMillis, _pendingIntent);
_autoUpdateOn = true;
}else{
Utils.amLog("do not make repeat");
if(null==_pendingIntent){
_pendingIntent = PendingIntent.getService(TraceService.this, 0,
new Intent(TraceService.this, TraceService.class)
, Intent.FLAG_ACTIVITY_NEW_TASK);
}
_alarmManager.cancel(_pendingIntent);
_pendingIntent = null;
_autoUpdateOn = false;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(null==intent){
return super.onStartCommand(intent, flags, startId);
}
Utils.amLog("onStartCommand flags:"+intent.getFlags());
//当服务被后台(Alarm服务)调用时,上传位置
if(Intent.FLAG_FROM_BACKGROUND==intent.getFlags()){
_checkAndUpdateLocation();
}
return START_STICKY;
}
如果你需要进一步的细节的话,留个邮箱窝把这个服务的代码给你
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯