将多个事件侦听器实现到后台类中

时间:2013-09-24 23:55:49

标签: java android events listener

就代码而言,我的活动已经变得非常笨重(至少与其他类的重量相比)所以我希望创建一个简单的帮助类。我想简单地创建一个类(如SimpleSessionManager),它将为我实现位置和传感器事件侦听器。有没有办法通过构造函数使用一个简单的类,或者有没有办法将辅助类作为后台活动运行?据我所知,我无法通过扩展Service类来实现事件监听器。它是否正确?将它作为一个简单的后台活动运行将是理想的,因为那时我可以使用findViewById()方法,但我似乎无法弄清楚如何使用我希望的响应者响应。如果Fragment类可以工作,有人可以指向我相关示例的方向,因为我可以找到的所有内容似乎都无法使我的实现工作。

1 个答案:

答案 0 :(得分:0)

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

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秒请求更新一次。这是一个非常糟糕的用户体验,因为它会很快杀死他们的电池。