如何通过通知保持活动状态,并且每秒可运行



>我有一个活动,演示有关服务器的信息ping结果。这项工作每秒完成一次,可运行,如下代码所示:

pingRunnable = new Runnable() {
@Override
public void run() {
pingMethod();
resultsNotification();
handler.postDelayed(this, 1000);
}
};

另一方面,我必须在通知中实时显示一些结果,我做到了,但是有一个问题,首先是设备在 10 分钟应用程序后被锁定并且活动作系统破坏,只是通知停止在停滞状态。 然后我尝试使用以下代码修复它:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
wl.release();

实际上,我使用了wl.release((;像这样:

@Override
protected void onDestroy() {
wl.release();
super.onDestroy();
}

当我这样做时,它变得更好了,但是当设备被锁定时,几个小时后再次发生这种情况。 现在我不知道我该如何控制这些服务(后台(可运行(和前台(通知((一起保持长时间的活动,例如两三天甚至更长时间。

首先,您不应该使用活动来执行此类工作,建议使用服务。要智能地完成此类工作,Android框架有许多选项,最近的是新的WorkManager组件。这些服务应该使您能够控制何时安排后台工作 - 例如,仅在存在有效网络连接时运行,并允许您选择工作应运行的时间段。

https://developer.android.com/topic/libraries/architecture/workmanager/advanced

其次,每秒轮询一次将对电池寿命产生巨大影响 - 如果您这样做,您的应用程序很可能会被标记为不良公民,并可能成为卸载的候选者。

您应该考虑一般轮询是否是用户的最佳选择。使用云消息传递将改善您的应用程序需要完成的工作量,即您可以在服务器数据更改时推送通知,从而避免您进行手动轮询。https://firebase.google.com/docs/cloud-messaging/

最新更新