当活动关闭/重新启动时,保持从服务更新Android UI

当活动关闭/重新启动时,保持从服务更新Android UI,android,user-interface,service,handler,Android,User Interface,Service,Handler,暂时想弄清楚这件事。我有一个应用程序,在一个单独的服务中运行倒计时,它调用开始前台,显示一个通知。我通过按钮启动倒计时服务: Intent i = new Intent(getApplicationContext(), PomoService.class); i.putExtra("EXTRA_MESSENGER", new Messenger(handler)); startService(i); 我使用处理程序更新U

暂时想弄清楚这件事。我有一个应用程序,在一个单独的
服务中运行倒计时
,它调用
开始前台
,显示一个通知。我通过按钮启动倒计时服务:

            Intent i = new Intent(getApplicationContext(),  PomoService.class);
            i.putExtra("EXTRA_MESSENGER", new Messenger(handler));
            startService(i);
我使用
处理程序更新UI,该处理程序通过
onTick()
方法中的消息接收包数据,告诉倒计时还剩多少毫秒:

Messenger messenger = (Messenger)extras.get("EXTRA_MESSENGER");
        Message msg = new Message();
        Bundle b = new Bundle();
        b.putLong("remainingTime", millisUntilFinished);
        msg.setData(b);
        try {
            messenger.send(msg);
        } catch (RemoteException e) {
            Log.i("error", "error");
        }
在活动中:

    private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        long sentTime = msg.getData().getLong("remainingTime");
        textCountdownMin.setText(String.format("%02d", (sentTime/1000)/60));
        textCountdownSec.setText(":" + String.format("%02d", (sentTime/1000)%60));
    }
};
整个设置工作正常,唯一的问题是,如果用户点击后退按钮或从最近的应用程序列表中删除应用程序,然后从抽屉或正在进行的通知中重新打开,则文本将不再更新。尽管如此,倒计时仍在进行中,因为我可以从仍然显示的通知和我使用AlarmManager唤醒屏幕的事实中看到它,并且这是正确启动的


关于我应该采取什么措施的任何线索?

我使用LocalBroadcastManager解决了这个问题:

最简单的方法是使用动态广播接收器。在您的活动中创建动态BR,您希望在其中更新UI,同时设置意图过滤器和唯一操作。然后,当您的服务运行时,在服务内部创建一个新的意图,将其设置为设置为意图过滤器的操作,然后发送广播