1

所以我计划创建一个需要获取用户位置的应用程序,它会有一个LocationController实现LocationListener接口的类。

我想要实现的是,一旦主要活动(MainActivity现在调用它)开始(在它的onCreate方法中)调用我的LocationController对象并让它开始获取位置修复和更新。

但是,我还需要实现一个 IntentService 或 Service ,即使在主要活动关闭后(即调用onPauseand or onStop)也将继续运行,并且该服务需要访问与LocationController主要活动在方法中启动的相同对象onCreate以获得一些位置读数。

现在,我花了一些时间研究如何将数据从活动传递到服务并查看Serializable,BundleParcel对象,它们都不能传递LocationListenerLocation对象,所以这对我来说不是一个选择(除非我错过了什么,在这种情况下,我愿意接受建议)。

我想到的另一个选择可能是静态对象。基本上,有LocationController一个静态类,以便可以调用它的方法来开始获取位置修复,但即使在被终止MainActivity后它也继续存在。MainActivity但是,我仍然不清楚如何做到这一点。例如,我是让我的整个LocationController对象成为静态对象,还是让其中的一些方法成为静态对象?

谁能帮我这个?

更新

于是我采纳了歌舞伎的建议,在主活动课上写了以下内容:

public void setLocationController() {
    if (locationController == null)
        this.locationController = new LocationController(this);
}

public static LocationController getLocationController() {
    // make sure to have called setLocationController() early in your
    // activity's life. onCreate is a good place
    return this.locationController;
}

,其中设置了一个单例,但要访问我的 IntentService 类中的位置控制器(调用它MyService),我将位置控制器作为主活动类的静态成员访问,如下所示:

public class MyService extends IntentService {
    private LocationController locationController = null;

    public MyService() {
      super("MyService");
      locationController = MainActivity.getLocationController();
      ...
    }

....

}   // end of class
4

2 回答 2

1

您可以制作您的LocationController类的单例实例,这本质上是“使您的整个LocationController成为静态对象”。请记住,随着您的活动停止,您的服务将维持您的应用程序的生命周期。如果您希望它长时间运行并处理多个“任务”,您可能需要小心IntentService一旦它停止工作就会关闭(可能会杀死您的应用程序和单例)。

于 2012-03-07T18:36:26.707 回答
1

最好有一个服务,在其中注册一个位置监听器,并通过接收器发送广播意图将位置更新传递给 Activity。

于 2012-03-07T18:36:42.077 回答