永发信息网

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;

}

如果你需要进一步的细节的话,留个邮箱窝把这个服务的代码给你
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯