我使用服务,在这项服务中,我有一个计时器,每分钟都会向我的TCP / IP服务器发送一条消息。
public void keepAlive() {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
Gson gson = new Gson();
String message = gson.toJson(new StillAlive(Mode.STILLALIVE));
sendMessage(message);
Log.d("TCP-SEND", message);
} catch(Exception e) {
Log.e("TCP1", e.getMessage());
}
}
}, 60000, 60000);
}
但是当我的手机锁定时。或者我按下按钮关闭显示屏,我的服务停止发送这些消息。
我不确定的是,如果服务停止,关闭显示器,或者由于任何我不知道的原因,计时器停止。
有没有人知道在这种情况下计时器是否会停止?或服务停止?
会感激一些帮助! : - )
答案 0 :(得分:3)
这是因为您的设备开始入睡。强烈建议将此其他实现用于此类过程:AlarmManager
它看起来像这样(这是我的代码的一部分):
private static AlarmManager am;
//....
@SuppressLint("NewApi")
public static void startByAlarm(Context ctx, boolean wakeup, long nexttime, boolean autoStart)
{
PendingIntent pi = wakeup? PendingIntent.getBroadcast(ctx, _.intentalarm, intent, PendingIntent.FLAG_CANCEL_CURRENT):
PendingIntent.getService(ctx, _.intentalarm, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am = (AlarmManager) ctx.getSystemService(Activity.ALARM_SERVICE);
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){
am.setExact(wakeup?AlarmManager.RTC_WAKEUP:AlarmManager.RTC, nexttime, pi);
} else{
am.set(wakeup?AlarmManager.RTC_WAKEUP:AlarmManager.RTC, nexttime, pi);
}
//or am.setRepeating ...
}
答案 1 :(得分:0)
查看可能对您有所帮助的This answer by jscharf,但您必须对此保持警惕,因为这是一项耗电量大的任务。