我正在构建计时器应用程序。计时器在服务上运行并更新ui。 该应用程序在onCreate()中启动服务。
getApplication().startService(intentService);
getApplication().bindService(intentService, serviceConnection, Context.BIND_AUTO_CREATE);
有效。除非不是。专门针对配置更改。
我知道调用活动被破坏(onDestroy)然后重新创建,onCreate被再次调用,并且... bindService()应该绑定到同一服务。我用相同的Intent,来自相同(应用程序)上下文的相同serviceConnection来调用它。
不是。它以某种方式绑定到新的服务对象。 (我可以在调试器中看到它,返回到活动的对象是不同的)。那打破了我的计时器。
对我来说很有趣,当我退出活动并通过Notification(它是一个前台服务,并且通知将您带到同一活动)重新进入活动时,onCreate()也被再次调用,startService和bindService也是如此,但是时间,它可以以某种方式正确绑定到正在运行的服务。
我想念什么?
编辑:以下是服务代码的主要部分:
public class MyService extends IntentService {
// variables ...
public MyService() { super("MyService"); }
protected void onHandleIntent(@Nullable Intent intent) {
if (!hasStarted) {
initializeTimer();
startTimer();
}
}
public IBinder onBind(Intent intent) {
return new RecordBinder(this);
}
public void onDestroy() {
super.onDestroy();
if (timer != null)
timer = null;
}
// there are also a bunch of private methods and stuff...
}