現在、Androidアプリであるフィットネストラッカーアプリケーションを開発しています。このアプリは常にバックグラウンドで実行され、ほとんどのデバイスで正常に動作しますが、アプリケーションが停止するという問題が発生しています一部のSamsungデバイスでは完全にサポートされています。調査の結果、一部のSamsungデバイスには完全にカスタムの「アプリ最適化」機能があるようです( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app- optimisation-after-updating.html )、これは基本的にDoze機能の(非常に)原始的なバージョンであり、Androidの以降のバージョンに存在し、基本的にアプリを殺しているだけです) 3日間使用されていません。
このアプリは多かれ少なかれロギングのみを行っており、アクティビティを開かないため、この機能は多くのSamsungデバイスで事前に有効になっているため、私たちにとって大きな問題となります。問題はフォアグラウンドサービスを使用することで解決されますが、これは常に通知でユーザーを妨害する必要があるソリューションの大ハンマーであり、アプリをフォアグラウンドにする必要はありません。通常の電力で問題ありません。 Androidの管理。
Samsung App Optimization機能は、3日間使用されなかった場合にアプリを「最適化」することを明確に述べています。 Samsungが「使用されている」と見なしているものについて洞察はありますか?それを何らかの形でトリガーできますか?
サイドラント:私の意見では、これは不適切に実装された機能であり、Android=の開発をより敵意のあるものにします。私たちの使用例に加えて、メッセンジャーアプリケーションが機能しなくなります。 FacebookメッセンジャーとWhatsappがアプリから除外されるようにハードワイヤードされていると、ユーザーのエクスペリエンスが損なわれるため、ユーザーは夢中になります。
私はSamsungのデバイスを所有しています(現在所有しています)ので、ユーザーの観点から見ると、それがどのように機能するかについて少し知っています。技術仕様とそれが内部でどのように機能するかは完全に別の問題であり、私は答えることができません。
システムは、アプリを開いたかどうかを検出できます。 Samsungはそれをアプリの最適化に使用し、3日間以上使用されていないアプリの電力を節約します。しかしそれはひどいシステムです。
アプリにとって重要なバックグラウンドプロセスは無視され、フィットネストラッカーのようにアクティブに使用しているアプリであっても問題が発生します。アプリの最適化リスト内の内容を引用するには:
「バッテリーの電力を節約するために、3日以上使用されていないアプリは、電力を節約するように指定されます。電力を節約するように指定されたアプリは通知を表示しない場合があります。」
(ノルウェー語からの大まかな翻訳、元々はS6を実行しているAndroid 6)から取得)
したがって、手動または自動で設定された(3日間使用しない)アプリは、バックグラウンドプロセスでさまざまな問題を引き起こす可能性があります。ただし、ユーザーはどのアプリでもバッテリーを節約しないように設定でき、自動設定を無視できることに注意してください。これを念頭に置いて、考えられる解決策を検討しましょう。
アプリとアプリの最適化について心配する必要がないシナリオが1つあります。アプリの最適化が完全に無効になっている場合です。
それはさておき、実際にできることは2つだけです。
Samsungのユーザーに、アプリの電池の最適化を無効にして問題を回避するよう依頼する
@MinaSamyが提案したように(現在は削除されている回答で)、SyncAdapterと定期的な同期があります。これはテストしていないので、動作するかどうかはわかりません。
3番目のオプションもありますが、これは実際には解決策ではありませんが、無視してアプリの最適化を無効にするか、まったく気にしないでギャンブルすることができます。
サムスンが「使用されている」と見なしていることについて誰かが洞察を持っていますか?
私の知る限り、Samsungが偶発的なオープンに対する保護策を追加したり、何らかの最小アクティビティ要件を追加したりしない限り、オープンで十分です。アプリの使用を実際に検出し、それに関連して省電力を設定する動的システムではなく、ハードコードされたルールで実行される「愚かな」機能のようです。 「有効にするのは簡単」ですが、幸いにも無効にするのは簡単です。
生き続けるイベントをトリガーできないことを意味します(SyncAdapterがトリックを行わない限り)
そして、事実を明確にするために @ Neilの答え から:
ユーザーがこれを実行できるように思われるので、それを制御するデータベースまたは設定が必要です。
ちょっとあります。合計4つの設定があり、そのうち3つはアプリ固有のもので、データベース(または他の形式のデータストレージ)に保存されます。これらの4つの設定は、非常に浅いものの、アプリの最適化の動作を変更するために使用できます。
最初の3つのオプションはアプリごとにあります。つまり、各アプリは個別の設定を持つことができます。アプリの最適化を無効にすることは、まさにあなたが期待することです。それはすべてのアプリの機能全体を無効にします。完全に無効になっている場合、最適化されるものはありません。
設定>デバイスの健康>バッテリーには、「未使用のアプリをスリープ状態にする」オプションがあります。オフにしたり、所要時間を変更したりできます。デフォルトは3日です。
それはあなたの問題のように聞こえます。
「最適化しない」リストにサービスを追加できない理由はありますか?
ユーザーがこれを行うことができるようですので、それを制御するデータベースまたは設定が必要です。
または、いずれかのデバイスにインストールしていることを検出した場合は、アクティビティの最適化ページを開き、「私たちを最適化しないでください!」というメッセージを表示します。
回避策として、このリンクを出発点として使用して、SyncAdapterメカニズムを実装しました: https://github.com/bmeike/MiniSync 完全に機能しません(テストでは、アプリで私は1時間ごとにログを書き込み、3日後にはこのスケジュールを尊重しなくなります)が、少なくとも3日後には停止せず、アプリを無視された最適化モードにする必要はありません。
更新:Android PIEへの更新後、3日後にスケジューリングが再び停止しました。別のデバイスで、Android Oreoを使用した同じアプリが、完全に尊重されていない)。