這裏簡單介紹兩種實現心跳的方式。
第一種,簡單粗暴線程實現
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(heartTime);
} catch (InterruptedException e) {
// e.printStackTrace();
}
//業務邏輯
}
}
}).start();
第二種,鬧鐘+廣播
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (count != 0) {
heartReq();
} else {
postReceiver("監聽服務啓動,開啓心跳");
}
count++;
postReceiver("心跳次數:"+count);
postReceiver("心跳間隔時間:"+(heartTime/1000) +"秒");
Global.debug("心跳次數====="+count+"======");
long triggerAtTime = SystemClock.elapsedRealtime() + heartTime;
Intent i = new Intent(this, HeartReceiver.class);
mPi = PendingIntent.getBroadcast(this, 0, i, 0);
// mManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, mPi);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, mPi);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, mPi);
} else {
mManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, mPi);
}
return START_STICKY;
}
廣播:
public class HeartReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Global.debug("心跳廣播接收=====");
Intent intent2 = new Intent(context, ListenService.class);
context.startService(intent2);
}
}