我一直在对此进行一些研究,但没有找到明确的答案。
功能挑战是:
a) 使用布局启动活动 (OK)
b) 按按钮(标记为 START)单击 is 启动后台服务(确定)
c) 虽然活动可以关闭,但后台服务必须继续运行(OK)
d) 后台进程还在,我可以在我的通知中看到(OK)
e) 活动从通知重新开始(OK)
f) 活动必须连接到流程并取回它的状态。只需检查服务是否正在运行并将开始-停止按钮的标签从 (b) 设置为 STOP。
e) 点击按钮将停止服务,这样就可以了。
以下是一些细节:
与我的服务 LogoTimerService 的连接是在这样的活动中完成的:
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// We've bound to LocalService, cast the IBinder and get
// LocalService instance
LogoTimerServiceBinder binder = (LogoTimerServiceBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
};
ON RESUME 我调用这个函数来实际连接:
private void connectLogoTimerService() {
Log.i(tag, "-connecting service");
Intent intent = new Intent(this, LogoTimerService.class);
startService(intent);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
if (mService!=null)
Log.i(tag, "-SERVICE BOUND");
else
Log.i(tag, "-Service NOT bound");
}
当我第一次启动应用程序时,我收到第二条(未绑定)消息。
为什么不绑定?是要慢吗?(好像在玩。)
如果我不破坏活动,则会找到 mService。
我怎样才能同步这个,所以我可以恢复状态?
我启动并绑定服务。它是否正确?
我可以看到该服务正在使用此代码运行(我在此站点上找到了它,谢谢):
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager
.getRunningServices(Integer.MAX_VALUE)) {
if (LogoTimerService.class.getName().equals(
service.service.getClassName())) {
return true;
}
}
return false;
}
非常感谢您的帮助!