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