Commit 2df9c9ad by pye52

增加指定时间重启设备的功能

parent 75095b78
......@@ -325,8 +325,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
commandViewModel.initialize();
handler.post(updateTimeRunnable);
MonitorUtils.startLogFilesMonitor(this);
MonitorUtils.startDatabaseMonitor(this);
MonitorUtils.startMonitors(this);
SCWebSocketClient.getInstance().tryConnect();
}
......@@ -400,8 +399,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
TTSHelper.release();
SCWebSocketClient.getInstance().realClose();
SCTaskExecutor.getInstance().quit();
MonitorUtils.stopDatabaseMonitor(this);
MonitorUtils.stopLogFilesMonitor(this);
MonitorUtils.stopMonitors(this);
}
private void initViews() {
......
package com.bgycc.smartcanteen.monitor;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import com.bgycc.smartcanteen.utils.DangerousUtils;
public class ReBootMonitor extends Worker {
public ReBootMonitor(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
DangerousUtils.reboot();
return Result.success();
}
}
......@@ -2,23 +2,68 @@ package com.bgycc.smartcanteen.utils;
import android.content.Context;
import androidx.work.ExistingWorkPolicy;
import androidx.work.OneTimeWorkRequest;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
import com.bgycc.smartcanteen.monitor.DatabaseMonitor;
import com.bgycc.smartcanteen.monitor.LogFileMonitor;
import com.bgycc.smartcanteen.monitor.ReBootMonitor;
import java.util.Calendar;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
public class MonitorUtils {
private static final String LOG_MONITOR_WORKER = "worker_log_monitor";
private static final String DATABASE_MONITOR_WORKER = "database_log_monitor";
private static final String REBOOT_MONITOR_WORKER = "worker_reboot_monitor";
private static final int LOG_REPEAT_INTERVAL = 4;
private static final int DATABASE_REPEAT_INTERVAL = 12;
// 每天早上指定时间重启设备
private static final int REBOOT_HOUR_OF_DAY = 3;
private static final int REBOOT_MIN = 0;
public static void startMonitors(Context context) {
startLogFilesMonitor(context);
startDatabaseMonitor(context);
startRebootMonitor(context);
}
public static void stopMonitors(Context context) {
stopLogFilesMonitor(context);
stopDatabaseMonitor(context);
stopRebootMonitor(context);
}
// 指定时间重启设备
private static void startRebootMonitor(Context context) {
stopRebootMonitor(context);
Calendar now = Calendar.getInstance(Locale.getDefault());
Calendar future = Calendar.getInstance(Locale.getDefault());
future.add(Calendar.DAY_OF_YEAR, 1);
future.set(Calendar.HOUR_OF_DAY, REBOOT_HOUR_OF_DAY);
future.set(Calendar.MINUTE, REBOOT_MIN);
future.set(Calendar.SECOND, 0);
long delay = future.getTimeInMillis() - now.getTimeInMillis();
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(ReBootMonitor.class)
.setInitialDelay(delay, TimeUnit.MILLISECONDS)
.build();
WorkManager.getInstance(context)
.beginUniqueWork(REBOOT_MONITOR_WORKER, ExistingWorkPolicy.REPLACE, request)
.enqueue();
}
// 指定时间重启设备
private static void stopRebootMonitor(Context context) {
WorkManager.getInstance(context)
.cancelUniqueWork(REBOOT_MONITOR_WORKER);
}
// 每隔一定时间检查日志文件夹并进行清理
public static void startLogFilesMonitor(Context context) {
private static void startLogFilesMonitor(Context context) {
stopLogFilesMonitor(context);
PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(LogFileMonitor.class, LOG_REPEAT_INTERVAL, TimeUnit.HOURS)
.addTag(LOG_MONITOR_WORKER)
......@@ -27,13 +72,13 @@ public class MonitorUtils {
.enqueue(request);
}
public static void stopLogFilesMonitor(Context context) {
private static void stopLogFilesMonitor(Context context) {
WorkManager.getInstance(context)
.cancelAllWorkByTag(LOG_MONITOR_WORKER);
}
// 每隔一定时间检查数据库并进行清理
public static void startDatabaseMonitor(Context context) {
private static void startDatabaseMonitor(Context context) {
stopDatabaseMonitor(context);
PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(DatabaseMonitor.class, DATABASE_REPEAT_INTERVAL, TimeUnit.HOURS)
.addTag(DATABASE_MONITOR_WORKER)
......@@ -42,7 +87,7 @@ public class MonitorUtils {
.enqueue(request);
}
public static void stopDatabaseMonitor(Context context) {
private static void stopDatabaseMonitor(Context context) {
WorkManager.getInstance(context)
.cancelAllWorkByTag(DATABASE_MONITOR_WORKER);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment