1

Android battery and memory optimizations - Google I/O 2016(18:46 aprox)には、今後アンバウンドバックグラウンドサービスが機能しないことが説明されています。無制限のバックグラウンドサービスを廃止するための新しいアンドロイドのガイドラインとアクティビティとの間でサービスを共有しましょう

私はその変化の精神を理解してユーザーの電池を保護し、電話機の応答性とパフォーマンスを向上させます。

しかし、私は、精神的には有界のサービスであるが、無制限のもので実装するというユースケースが1つあります。

ユースケースは、「複数のアクティビティにバインドされている」サービスであり、アクティビティがフォアグラウンドではなく、アクティビティの遷移の間に保持される必要がある場合は破棄できます。 (たとえば、すべてのアクティビティで同じ共有状態とリソースを維持するサービスで、再作成するのはうれしいことです)。

私が実装する方法は、各アクティビティでバインドされていないサービスを開始し、バインドしてバインドされていればそれをサービストラックにします。

無制限のサービスを使用せずにそのユースケースの実装を改善する方法を知っていますか? 無制限のサービスを使用せずにその使用パターンを許可するために、サービスへの追加が将来追加されるかどうかを知っていますか?

+1

'bindService'(以前の' startService'を持たない)と 'ContentProvider'カスタムの状態とリソースを保持できませんか? – pskink

+0

ありがとう@pskink、それは別の方法です。しかし、私は本当にここでContentProvidersを混在させたくありません。私はアプリケーションのサービス作成の間に一時的にサービス状態を保存することを好みます。 私がCPについて気に入らないのは、私がそれを必要としない/望まないなら、それを実装しなければならないということです。また、私の理解にライフサイクルはプロセスの生き方です。 – lujop

+0

''アプリケーションのサービス作成の間に一時的にサービス状態を保存することを好みます。 ''あなたはカスタムの' android.app.Application'クラスを意味しますか?それはあなたのカスタムContentProviderと同じライフサイクルを持ちます:プロセスが終了した後に破棄されます – pskink

答えて

0

@CommonsWareからシングルトンを使用している点は良い点です。 ほとんど常に単純に優れていますし、他のソリューションは複雑さを増し、ライフサイクルの問題自体を解決するわけではないので、私は@ CommonSWareのアイデアを取っています。

最後に、他のアイデアは、私たちが前景での活動をしているので、何らかの仕事がバックグラウンドで行われていることを示すサービスを明示的に使用する必要がないため、

私が作った解決策は、何らかのアクティビティがサービスを使用しているかどうかを追跡し、誰もサービスをしばらく使用していない場合には、それを破棄するカウントダウンされたシングルトンを使用することです。

I created a Gist if some is interested in the code。実装についてのコメントは大歓迎です。

関連する問題