タイマーアプリを作っています。タイマーはサービスで実行され、UI を更新します。アプリは onCreate() 内でサービスを開始します。
getApplication().startService(intentService);
getApplication().bindService(intentService, serviceConnection, Context.BIND_AUTO_CREATE);
できます。そうでないことを除いて。特に構成の変更について。
呼び出し元のアクティビティが破棄 (onDestroy) されてから再作成され、onCreate が再度呼び出され、bindService()が同じサービスにバインドされることを知っています。同じ(アプリケーション)コンテキストから、まったく同じインテント、同じserviceConnectionで呼び出しています。
そうではありません。何らかの方法で新しいサービス オブジェクトにバインドします。(デバッガーで確認できます。アクティビティに返されるオブジェクトは異なります)。それは私のタイマーを壊します。
興味深いことに、アクティビティを終了して通知を介して再入力すると (これはフォアグラウンド サービスであり、通知によって同じアクティビティが表示されます)、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...
}