我有一个绑定到持久服务的 Android 应用程序(一旦启动startService()
).
该服务是应用程序的一个组成部分,因此几乎在每个 Activity 中都会使用该服务。因此,我只想绑定到服务一次(而不是在每个活动中绑定/取消绑定)并在应用程序的生命周期内保持绑定。
我已经从应用 http://developer.android.com/reference/android/app/Application.html并绑定到服务应用程序#onCreate() http://developer.android.com/reference/android/app/Application.html#onCreate%28%29。但是我现在遇到的问题是我不知道我的应用程序何时存在应用程序#onTerminate() http://developer.android.com/reference/android/app/Application.html#onTerminate%28%29从未被调用过,请参阅 JavaDoc:
此方法适用于模拟过程环境。它永远不会
在生产 Android 设备上调用,其中进程被删除
简单地杀死他们;没有用户代码(包括此回调)
这样做时被执行。
那么如何彻底解除应用程序中绑定的服务的绑定呢?
我通过计算对服务绑定的引用解决了这个问题Application
. Every Activity
必须打电话acquireBinding()
在他们的onCreate()
方法和调用releaseBinding()
in onDestroy()
。如果参考计数器达到零,则释放绑定。
这是一个例子:
class MyApp extends Application {
private final AtomicInteger refCount = new AtomicInteger();
private Binding binding;
@Override
public void onCreate() {
// create service binding here
}
public Binding acquireBinding() {
refCount.incrementAndGet();
return binding;
}
public void releaseBinding() {
if (refCount.get() == 0 || refCount.decrementAndGet() == 0) {
// release binding
}
}
}
// Base Activity for all other Activities
abstract class MyBaseActivity extend Activity {
protected MyApp app;
protected Binding binding;
@Override
public void onCreate(Bundle savedBundleState) {
super.onCreate(savedBundleState);
this.app = (MyApp) getApplication();
this.binding = this.app.acquireBinding();
}
@Override
public void onDestroy() {
super.onDestroy();
this.app.releaseBinding();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)