有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使活动保持活动状态,并每秒通知和运行

我有一个活动,展示关于服务器的信息和结果。这项工作每秒钟都会运行一次,如下代码所示:

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。释放();像这样:

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

当我这样做的时候,它变得更好了,但当设备被锁定时,这又发生在几个小时后。 现在,我不知道如何将这些服务(后台(Runnable)和前台(Notification))控制在一起,以便让活动持续很长时间,比如两三天甚至更长时间


共 (1) 个答案

  1. # 1 楼答案

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

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

    其次,每秒钟进行一次轮询都会对电池寿命产生巨大影响——如果你这样做,你的应用很可能会被标记为坏公民,很可能会被卸载

    你应该考虑一般的投票是否是你的用户的最佳选择。使用云消息将提高你的应用程序需要做的工作量,也就是说,当服务器数据发生变化时,你只需发出通知,这就避免了你必须进行手动轮询https://firebase.google.com/docs/cloud-messaging/