何があってもアプリを強制的にバックグラウンドで実行し続ける方法はありますか?


12

アイスクリームサンドイッチ(ICS)では、OSがアプリを分類し、各カテゴリには独自のしきい値があり、OSがメモリ不足になったときに最初に閉じるアプリを決定するために使用します。

誰かに悩まされていますか?たとえば、タイマーを開いてバックグラウンドで実行して何かの経過時間を測定した後、さらにいくつかのアプリを開いて、タイマーがリセットまたは閉じられたことを確認するために戻ってきましたか?つまり、真剣に、それは本当に耐え難いほど迷惑です。

OSのメモリが不足しても、アプリをバックグラウンドで強制的に実行する方法はありますか?


7
それはアプリによる悪いコードのサインです。ユーザーはこれを気にする必要はありません。Androidは、アプリが状態を保存して後で復元できるようにする手段を提供します(初期のAndroidバージョン以降)。アプリ開発者にバグレポートを送信する必要があります。
フロー

回答:


8

受け入れられた答えは、間違っているか時代遅れであることが判明しました。Xposedアプリの「アプリ設定」モジュールを使用すると、アプリごとにアプリを強制終了または解放しないように指定できます。

http://repo.xposed.info/module/de.robv.android.xposed.installer

http://repo.xposed.info/module/de.robv.android.xposed.mods.appsettings

このような低レベルの振る舞いを変更するアプリで遊ぶときは、もちろん責任ある注意を払う必要があります。


これにはrootが必要であり、Android OSを大幅に変更してインストールすることに注意してください。
sweisgerber.dev

5

簡単な答え:いいえ。Androidは常にOOM(Out-Of-Memory)優先順位を使用して、未使用のメモリを解放します。一部のタスクマネージャーでアプリの優先順位を変更できます(少なくとも再起動するまで)が、それでもメモリが不足すると、バックグラウンドでアプリが強制終了されます。

このシナリオを考えてみてください。起動時に実行され、バッファオーバーフローを引き起こし、すべてのメモリを消費する、不適切にコーディングされたアプリをダウンロードしました。通常、このアプリは強制終了されますが、開いたままに設定されている場合は、再起動するまで携帯電話を効果的にブロックし、その後何度も起動します。

一部のタイマーは、この問題を回避するために優先度の高いサービスを使用しますが、タイマーがバックグラウンドにあるときに十分なパフォーマンスのリソースを占有するアプリを起動すると、最終的には終了します。


1
そうである必要はありません、IMO。システムがデフォルトで古い方法を実行するようにし、ユーザーが特定のアプリを必要に応じてその特定の瞬間にバックグラウンドで実行する場合は、そのオプションを提供します。アプリを「固定」するのはユーザーの裁量であるため、別の権限カテゴリを用意する必要はありません。一度実行したアプリが永久に停止することは望ましくありません。私の質問で説明したのと同じようなニーズがあるときに、これを行うオプションが欲しいだけです。
-supertonsky

1
@onikバッファオーバーフローはメモリの占有とは関係ありません。バッファオーバーフローとは何ですか?

3
@onik答えはノーです。バッファオーバーフローとは何かわかりません。とった。

1
また、@ onikは、リンクリストの無限ループにより、Integer.MAX_VALUE時間をループするずっと前に、確実にOOMに到達する可能性があります。Integer.MAX_VALUEとにかく物事が制限されていると思いますか?

1
@onik正しい:定義により、バッファオーバーフローは割り当てられたメモリサイズを拡張できません。割り当てられたメモリサイズを拡張する場合、バッファオーバーフローではありません。あなたは無限ループのことを考えていると思います。
Mooingダック

1

いいえ。ただし、問題を軽減する2つの方法が思い浮かびますが、どちらも開発者のみが実装できます。最初の方法は通知を表示することです。Androidはこれを行うアプリに他よりも高い優先度を与えます。2番目は、タイマーが最終的に再起動されたときにリセットされないように、開始時間を保存することです。


1
フォアグラウンド優先度で理由なくアプリを実行すること(通知が必要な理由)は、悪い習慣と見なされます。前述のように、AndroidはOOMキラーの影響を受けないタイマー/カウンターを許可する素晴らしいApiを提供します。ダイアン・ハックボーンによるこのトピックに関する素晴らしい投稿があります
フロー

このようなAPIがあることは疑いありませんが、この質問のどこでこれについて言及されていますか?
エリック

1
また、投稿したゲームの例とは異なり、この場合は可能な限りアプリを実行し続ける理由が明らかにあります。
エリック

4
いいえ、タイマーのためだけにアプリを実行し続ける理由はありません。を使用onSaveInstanceStateonRestoreInstanceStateて、タイマー情報を含むアプリの状態を保護します。フォアグラウンドで実行する必要はありません。アラームであっても、AlarmManager後で実行されることを確認するために使用できます。フォアグラウンドを使用する唯一の理由は次のとおりです。1.音楽の再生やビデオの表示など、実際のフォアグラウンドアクティビティが進行している。2.データ接続を開いたままにします(例:IMAP IDLE(プッシュ))。
フロー

0

最初の方法:---プログラムでスティッキースレッドを作成する場合、はい、プログラムを実行中に強制的に保持できます。ただし、高度な設定モードのユーザーは、バックグラウンドで実行中のアプリを停止できることを忘れないでください。ただし、giveイベントが発生したときに開始するようにスティッキースレッドを記述すると、これを実現できます。

2番目の方法:ユーザーがAndroid以外のユーザーで、バックグラウンドでアプリを実行したい場合。アプリのバックグラウンドでSL4スクリプトを使用します。バックグラウンドチェックとプログラムを実行するスクリプトを使用し、フロントエンドを記述して他の何かを表示します。

例:ほとんどのゲームエンジンでは、これは組み込まれています。ユーザーがアプリをオフにしても、サーバーに接続します。エンジンが電話で複数のスクリプトを作成し、特定のイベントでランダムにチェックされ、TRIGGERがフォアグラウンドのバックグラウンドでアプリを継続的に実行するために使用される理由。

*** TYPOの..スペルチェッカーは利用できません。uが意図したものを達成することを望みます。


Androidエンドユーザー向けのQ&AサイトであるAndroid Enthusiastへようこそ。私が理解できる限り、あなたが提供した2つの方法は、開発者側、つまりアプリのソースコードを持っている側からしか実行できません。残念ながら、ここではほとんどの読者はアプリを開発していないため、これは役に立たないかもしれません。場合、これは非開発者のための適用であるかもしれない、考える編集をそれが明確に答えをINGのアプリのソースコードに触れることなく、これらを行う方法。ありがとう。
アンドリューT.

-1

アプリをロックするオプションが時々あります。これにより、電話でそのアプリケーションを強制終了または停止できなくなります。

ロックオプションはOS自体では使用できません。GOタスクマネージャーなどのサードパーティアプリを使用すると役立ちます。


2
OOMの強制終了はカーネルによって行われ、アプリがそれを妨げたり、プロセスを「ロック」することはできません。リンクしたアプリは、アプリ自体を殺すタスクキラーです。参照しているロック機能は、タスクキラーによる殺害を防ぐだけです。
エリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.