不断更新活动的Android服务

不断更新活动的Android服务,android,service,android-service,Android,Service,Android Service,我已经建立了一个跑步应用程序。它运行一个活动,在用户界面上显示一个计时器,一个收集坐标和许多其他东西的gps侦听器(该活动做了很多工作) 现在,我的客户机的请求是移动服务中的所有活动逻辑。这样,当您启动正在运行的会话时,服务将启动,通知(非常简单,只有静态文本)将出现。活动应跟踪服务中的工作(计时器应继续,速度应显示,ecc…)。点击通知会启动活动。如果活动关闭或崩溃,服务应继续运行,当您点击通知时,应在用户未注意到任何差异的情况下启动新活动(计时器应持续显示正确的时间,平均速度应理解活动崩溃前

我已经建立了一个跑步应用程序。它运行一个
活动
,在用户界面上显示一个计时器,一个收集坐标和许多其他东西的gps侦听器(该活动做了很多工作)

现在,我的客户机的请求是移动
服务中的所有活动逻辑。这样,当您启动正在运行的会话时,服务将启动,通知(非常简单,只有静态文本)将出现。活动应跟踪服务中的工作(计时器应继续,速度应显示,ecc…)。点击通知会启动活动。如果活动关闭或崩溃,服务应继续运行,当您点击通知时,应在用户未注意到任何差异的情况下启动新活动(计时器应持续显示正确的时间,平均速度应理解活动崩溃前的相关速度,ecc…)

我知道有很多方法可以做到这一点。 我想问的是:什么是最好的方法?有没有这样的行为从哪里开始的例子?我应该避免哪些常见错误?是否有可遵循的最佳实践


谢谢

我开发了一个具有类似服务行为的应用程序。它还需要一个收集数据的服务和一些显示数据的活动

对于这些类型的应用程序,您希望在用户手动停止服务之前保持服务的活动状态,但对于android来说,如果设备内存不足,它仍有可能终止服务

对于服务-活动交互,您需要绑定到服务。此处提供了一份良好的文档:

确保在服务的
onStartCommand
功能中返回
START\u STICKY
。这将确保当系统还原服务时,意图为空,并告诉android您显式启动和停止服务

从活动绑定到服务时,需要检查服务是否准备就绪(系统未还原)。这可以通过在服务中添加一个默认为false的“ready”字段来实现,如果
onStartCommand
intent
不为null,则该字段将设置为true。因此,您可以对恢复的服务做出正确反应,并从头开始启动应用程序


要使服务保持高优先级,您需要在服务内部调用
startForeground
。这还需要显示通知,以便用户知道服务正在后台运行。

在服务内部,您可以使用本地broadcastmanager

@Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        broadcaster = LocalBroadcastManager.getInstance(this);
    } 
@Override
    public int onStartCommand(Intent intent, int flags, int startId) {



        handler.removeCallbacks(sendUpdatesToUI);
        handler.postDelayed(sendUpdatesToUI, 1000);
        return START_STICKY;
    }

    private Runnable sendUpdatesToUI = new Runnable() {
        public void run() {
            DisplayLoggingInfo(); //do watever you want to push
            handler.postDelayed(this, 1000); // 10 seconds
        }
    };