我有一个活动,我可以使用它启动一个前台服务,即使该活动已关闭,该服务仍在后台运行。我绑定到该服务是因为我想在活动停止和恢复时重新使用同一服务。
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);
}
});
在服务类中,服务如下启动: ForegroundService.java
startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, serviceNotification);
return Service.START_STICKY;
我遇到的问题是,停止MainActivity
时会调用unBind
,这很好,但是当我恢复MainActivity
并再次调用bindService
时,它永远不会发生。
前台服务正在运行,我从活动的bindService
再次调用onResume
,但是mBound
和mService
仍然为空,即使我容纳{{1 }}(我知道while循环不好,但它用于调试)
async bindService
没问题。
MainActivity.class:
serviceConnection
在活动if (fsRunning) {
if (!mBound) {
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
}
do {
SystemClock.sleep(500);
} while (!mBound);
}
之后如何触发前台服务重新绑定到MainActivity
并触发onStop
?
答案 0 :(得分:1)
我将bindService
的调用移到了onStart
,并将需要执行的代码移到了onServiceConnected
,这为我解决了这个问题。在活动中从unbindService
调用了onStop
。
感谢@ greeble31指出我的逻辑错误。
THIS链接还包含有关绑定时间的非常详尽的信息