如何在应用程序销毁时解除绑定服务
How to unbind a service when the application is destroyed
我想在用户打开我的应用程序时启动一个服务,我的一些活动需要绑定服务,当用户关闭我的应用程序时,我停止服务。
问题是我在哪里可以停止服务。我希望我的服务在我的应用程序打开时工作。
我在Application.onCreate()
方法中启动服务,发现Application
中没有onDestroy()
方法。
我试过在启动器 activity onDestroy
中停止它,但我认为这不是一个好方法,因为系统会在内存不足时恢复启动器 activity。
如果您根据 运行 活动计数启动和停止服务会怎样?这是一个例子。
public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks {
private int startedActivitiesCount = 0;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
private void onAppStart() {
// Start service
}
private void onAppQuit() {
// Stop service
}
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
startedActivitiesCount++;
if (startedActivitiesCount == 1) {
onAppStart();
}
}
@Override
public void onActivityDestroyed(Activity activity) {
startedActivitiesCount--;
if (startedActivitiesCount == 0) {
onAppQuit();
}
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
}
我想在用户打开我的应用程序时启动一个服务,我的一些活动需要绑定服务,当用户关闭我的应用程序时,我停止服务。
问题是我在哪里可以停止服务。我希望我的服务在我的应用程序打开时工作。
我在Application.onCreate()
方法中启动服务,发现Application
中没有onDestroy()
方法。
我试过在启动器 activity onDestroy
中停止它,但我认为这不是一个好方法,因为系统会在内存不足时恢复启动器 activity。
如果您根据 运行 活动计数启动和停止服务会怎样?这是一个例子。
public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks {
private int startedActivitiesCount = 0;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
private void onAppStart() {
// Start service
}
private void onAppQuit() {
// Stop service
}
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
startedActivitiesCount++;
if (startedActivitiesCount == 1) {
onAppStart();
}
}
@Override
public void onActivityDestroyed(Activity activity) {
startedActivitiesCount--;
if (startedActivitiesCount == 0) {
onAppQuit();
}
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
}