Android 应用程序代码在 phone 屏幕锁定时停止
Android Application code stop when phone screen is locked
我编写了应用程序,在后台检查每分钟的条件,如果为真,它将发送 notification/vibrate。
它工作正常,但只有当我的 phone 处于活动状态时(意味着屏幕未锁定)。
我尝试了很多解决方案,例如使用服务、JobSchedule、WorkManager(当前),但它们似乎都不起作用。
WorkManager 代码的行为是这样的:
(phone屏幕锁定时)
- 第 1 分钟:发送通知
- 第 2 分钟:发送通知
- 第 3 分钟:无
- 第 4 分钟:无
- ......
(点亮屏幕)
出现群发通知,如任务运行锁定时,解锁后才显示
谁能帮我解决这个问题?我正在使用 OnePlus 9 Pro 进行测试
代码片段
public class MyService extends Worker {
Timer myTimer;
TimerTask doThis;
private DBHelper mydb;
public MyService(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@Override
public Result doWork() {
StrictMode.setThreadPolicy(new Builder().permitAll().build());
mydb = new DBHelper(getApplicationContext());
// Let it continue running until it is stopped.
myTimer = new Timer();
int delay = 0; // delay for 0 sec.
int period = 1000*60; // repeat every 60 sec.
doThis = new TimerTask() {
public void run() {
//Some task
if (true) {
notify("aaaa");
Log.e("OK", "Match!");
}
...
myTimer.schedule(doThis, delay, period);
return Result.success();
}
您的应用程序的问题不在于流程,而在于 android 系统本身。
您需要实施一种叫做打瞌睡模式的东西。这样当 phone 被锁定时进程/应用程序不会被终止
Google Docs On Doze Mode
您需要实现一个名为 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
.
的权限
我编写了应用程序,在后台检查每分钟的条件,如果为真,它将发送 notification/vibrate。
它工作正常,但只有当我的 phone 处于活动状态时(意味着屏幕未锁定)。
我尝试了很多解决方案,例如使用服务、JobSchedule、WorkManager(当前),但它们似乎都不起作用。 WorkManager 代码的行为是这样的:
(phone屏幕锁定时)
- 第 1 分钟:发送通知
- 第 2 分钟:发送通知
- 第 3 分钟:无
- 第 4 分钟:无
- ......
(点亮屏幕)
出现群发通知,如任务运行锁定时,解锁后才显示
谁能帮我解决这个问题?我正在使用 OnePlus 9 Pro 进行测试
代码片段
public class MyService extends Worker {
Timer myTimer;
TimerTask doThis;
private DBHelper mydb;
public MyService(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@Override
public Result doWork() {
StrictMode.setThreadPolicy(new Builder().permitAll().build());
mydb = new DBHelper(getApplicationContext());
// Let it continue running until it is stopped.
myTimer = new Timer();
int delay = 0; // delay for 0 sec.
int period = 1000*60; // repeat every 60 sec.
doThis = new TimerTask() {
public void run() {
//Some task
if (true) {
notify("aaaa");
Log.e("OK", "Match!");
}
...
myTimer.schedule(doThis, delay, period);
return Result.success();
}
您的应用程序的问题不在于流程,而在于 android 系统本身。
您需要实施一种叫做打瞌睡模式的东西。这样当 phone 被锁定时进程/应用程序不会被终止
Google Docs On Doze Mode
您需要实现一个名为 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
.