Activity onResume 后不重新绑定到前台服务
Activity not rebinding to foreground service after onResume
我有一个 activity,我用它来启动前台服务,该服务在后台继续 运行,即使 activity 已关闭。我绑定到此服务,因为我想在 activity 停止和恢复时重新使用相同的服务。
MainActivity.java
//Service button click listener
startSvcButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(MainActivity.this, ForegroundService.class));
startService(new Intent(MainActivity.this, ForegroundService.class));
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
moveTaskToBack(true);
}
});
在服务class中启动服务如下:
ForegroundService.java
startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, serviceNotification);
return Service.START_STICKY;
我遇到的问题是,当 MainActivity
停止时,会调用 unBind
,这很好,但是当我恢复 MainActivity
并调用 bindService
时再一次,它永远不会发生。
前台服务是运行ning,我从activity的onResume
再次调用bindService
但是mBound
和mService
保持空,即使我容纳 async bindService
(我知道 while 循环不好但它用于调试)
serviceConnection
没问题。
MainActivity.class:
if (fsRunning) {
if (!mBound) {
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
}
do {
SystemClock.sleep(500);
} while (!mBound);
}
如何让前台服务在 activity 的 onStop
并触发 new bindService
后重新绑定到 MainActivity
?
我将 bindService
调用移至 onStart
并将之后需要执行的代码移至 onServiceConnected
这解决了我的问题。 unbindService
是在 activity 中从 onStop
调用的。
感谢@greeble31 指出我的逻辑错误。
THIS link 也有关于绑定时间的非常有用的信息
我有一个 activity,我用它来启动前台服务,该服务在后台继续 运行,即使 activity 已关闭。我绑定到此服务,因为我想在 activity 停止和恢复时重新使用相同的服务。
MainActivity.java
//Service button click listener
startSvcButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(MainActivity.this, ForegroundService.class));
startService(new Intent(MainActivity.this, ForegroundService.class));
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
moveTaskToBack(true);
}
});
在服务class中启动服务如下: ForegroundService.java
startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, serviceNotification);
return Service.START_STICKY;
我遇到的问题是,当 MainActivity
停止时,会调用 unBind
,这很好,但是当我恢复 MainActivity
并调用 bindService
时再一次,它永远不会发生。
前台服务是运行ning,我从activity的onResume
再次调用bindService
但是mBound
和mService
保持空,即使我容纳 async bindService
(我知道 while 循环不好但它用于调试)
serviceConnection
没问题。
MainActivity.class:
if (fsRunning) {
if (!mBound) {
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
}
do {
SystemClock.sleep(500);
} while (!mBound);
}
如何让前台服务在 activity 的 onStop
并触发 new bindService
后重新绑定到 MainActivity
?
我将 bindService
调用移至 onStart
并将之后需要执行的代码移至 onServiceConnected
这解决了我的问题。 unbindService
是在 activity 中从 onStop
调用的。
感谢@greeble31 指出我的逻辑错误。
THIS link 也有关于绑定时间的非常有用的信息