2013-05-27 67 views
2

试图弄清楚一段时间。我有一个应用程序在单独的service中运行倒计时,该程序调用startsForeground,显示通知。我从按钮开始倒计时服务:当活动关闭/重新启动时,请继续更新Android界面服务

  Intent i = new Intent(getApplicationContext(), PomoService.class); 
      i.putExtra("EXTRA_MESSENGER", new Messenger(handler)); 
      startService(i); 

和我与handler,接收到包数据告诉多少毫秒留在倒计时,经由消息中的onTick()方法发送更新UI:

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唤醒屏幕这一事实,并且正确启动了。

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

回答

0

最简单的方法将使用动态广播接收器。在您想要更新UI的活动中创建动态BR,并设置意图过滤器以及独特的操作。然后,当服务运行时,服务内部创建一个新的意图,设置一个动作,设置为意图过滤器,然后发送广播。

相关问题