Java 在后台类中实现多个事件侦听器

Java 在后台类中实现多个事件侦听器,java,android,events,listener,Java,Android,Events,Listener,就代码而言,我有一个活动已经变得相当庞大(至少与其他类的重量相比),所以我希望创建一个简单的helper类。我只想创建一个类(比如SimpleSessionManager),为我实现位置和传感器事件侦听器。有没有办法通过构造函数利用一个简单的类来实现这一点,或者有没有办法将helper类作为后台活动来运行?据我所知,我无法通过扩展服务类来实现事件侦听器。这是正确的吗?将其作为一个简单的后台活动运行是理想的,因为这样我就可以利用findviewbyd()方法,但我似乎不知道如何让侦听器像我希望的那

就代码而言,我有一个活动已经变得相当庞大(至少与其他类的重量相比),所以我希望创建一个简单的helper类。我只想创建一个类(比如SimpleSessionManager),为我实现位置和传感器事件侦听器。有没有办法通过构造函数利用一个简单的类来实现这一点,或者有没有办法将helper类作为后台活动来运行?据我所知,我无法通过扩展服务类来实现事件侦听器。这是正确的吗?将其作为一个简单的后台活动运行是理想的,因为这样我就可以利用findviewbyd()方法,但我似乎不知道如何让侦听器像我希望的那样响应。如果Fragment类可以工作,有人能给我指出一个相关示例的方向吗?因为我发现我的实现似乎无法使用。

对于实用程序类,我会使用一个。例如,您可以设置一个LocationController来侦听位置更新,任何活动都可以向singleton询问最后一个位置。下面是一小段代码,向您展示我的意思

public class LocationController implements LocationListener {

    private static LocationController defaultController;

    public static LocationController getDefaultController(Context applicationContext) {
        if(defaultController == null) {
            defaultController = new LocationController();            

            LocationManager lm = applicationContext.getSystemService(Context.LOCATION_SERVICE);

            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 1000, this);
        }

        return defaultController;
    }

    private Location lastLocation;

    private LocationController() {
    }

    @Override
    public void onLocationChanged(Location location) {
        lastLocation = location
    }

    public Location getLastLocation() {
        return lastLocation;
    }

}
在活动中使用:

public void onCreate(Bundle SavedInstanceState) {
    setContentView(R.layout.mylayout);

    Location lastLocation = LocationController.getDefaultController(getApplicationContext()).getLastLocation();

}
我只是以位置为例,但对于你可能希望从应用程序中的多个活动中访问的内容,单例确实很好。因为Android已经为你提供了一个非常好的位置管理器服务,我可能不会在你的应用程序中使用它,但这取决于你。此模式可用于许多类型的侦听器和数据模型。要记住的一件事是使用应用程序上下文而不是活动上下文。您不希望将活动上下文用于类似的事情,因为它会导致您泄漏活动并消耗内存


使用这种模式需要注意的另一件事是记住关闭位置更新。只要Android没有从内存中删除你的应用程序,它就会继续接收位置更新。这意味着,即使您的应用程序可能不处于活动状态,因此不关心位置更新,但它仍将每隔30秒请求更新。这是一种非常糟糕的用户体验,因为它会很快耗尽他们的电池。

您熟悉匿名类和内部类的概念吗?在这种情况下,我觉得内部类并不能真正实现压缩每个类文件以及允许在多个类中使用代码的目标(可能是错的)。没有研究过匿名。有没有可能您有一些文档链接来说明它与此相关?感谢replyAnonymous类,在这些类中,您不需要指定类名,只需内联它并将其分配给变量。如果您想声明可以从多个不同类中使用的处理程序,那么只需编写ea即可ch处理程序作为它自己的顶级类实现适当的接口。将它们放在“
事件”中可能会有所帮助软件包。我会看一看,谢谢你的回复。我一定要研究一下。谢谢。默认的控制器方法使它成为一个单体吗?这是因为只有一个单独的构造函数是私有的。明白了,我之前在手机上看到过,很难看到。