0

タイマーアプリを作っています。タイマーはサービスで実行され、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...
}
4

0 に答える 0