最近のアプリリストからアプリをスワイプすると実際に何が起こりますか?


147

Ice Cream Sandwichの最近のアプリリストには、リストからアプリをスワイプする機能が追加されました。これにより、アプリは永久に閉じられます(私が知る限り、これはCM /カスタムROMでなくバニラ関数です)。ドキュメントとプラットフォームのハイライトは、この機能の内部的な動作をカバーしているようには見えませんが、システムが実際に何をしているのか知りたいです。

好奇心をさらに深めるため、簡単なテストを行うことにしました。CM9インストールでMusicを起動し、それからバックアウトしました。次に、最近のアプリのリストを確認し、実際にそこにあることを確認しました(サムネイルに基づいて適切な状態になっています)。その後Settings->Applications、Musicアプリを強制的に停止しましたが、それは最近のリストにまだリストされていたため、バックグラウンドで残っているプロセスに接続されていないように思われました。

音楽が悪い選択だったかもしれないことに今気づいて、私はUSA Todayアプリでもテストしました。これは基本的に同じ振る舞いを示し、最近のアプリリストのサムネイルにはこれが反映されていませんでしたが(強制的に)強制停止後に強制的に「再起動」するように見えました(キャッシュされていると思いますか?)

では、最近のリストからアプリをスワイプすると、OSレベルで実際に何が起こるのでしょうか?アプリのデータをRAMから単純に消去し、ガベージコレクションして、保存された状態を破棄しますか?

回答:


68

最近のアプリリストからアプリをスワイプするのは非常に簡単です。これは、さまざまなAndroidフォーラムでかなりの量の議論のトピックでした...コンセンサスはいくつかのコメントでここで最もよく説明されているようです:動作はアプリを閉じるのと似ていますが、まったく同じではないこと-一般的に(明示的な戻るボタンの処理を定義していないアプリの場合)、アプリケーションから終了するのに十分な時間をアプリケーション内から押し戻すことと同じです。

リンクには詳細がいくつかありますが、全体的にはアプリケーションを終了すると考えることができます。

音楽アプリに固有の、それはサービスを開始すると信じているので、タスク自体(音楽アプリ/ UI)が閉じている間、サービスはバックグラウンドで実行され続け、タスクが原因で音楽が突然停止しないようにしますメモリ管理上の理由で削除されました。それはあなたが見たものに影響したかもしれません。


1
おかげで、そのリンクにはたくさんの良い議論があります。あなたも正しいかもしれません:音楽、それは貧弱なテストだったかもしれません。キックのためだけに別のアプリを試します。
-eldarerathis

2
redditの議論はより良い検索語を見つけるのに役立ち、Dianne Hackbornのいくつかの投稿によって裏付けられたように思えたので、先に進んでこれを受け入れます。ありがとう!
eldarerathis


1
完璧にありがとう!私にとってこの記事は、私を助け:reddit.com/r/Android/comments/mpevh/...
ボリスStrandjev

Rocket Playerのようなサードパーティの音楽プレーヤーは、サービスがバックグラウンドで実行されていて、音楽を開始するためにアプリを開くか、ウィジェットで再生する必要がある場合でも、Recentsリストからアプリをスワイプすると音楽を停止します。
ラッキー

78

Googleの従業員からの説明につながる魔法の検索用語を見つけたようです。具体的には、Dianne Hackbornが最近のリストから何かをスワイプすると何が起こるかを説明するいくつかの異なる場所を見つけました。1つ目は、彼女のGoogle+投稿の1つに対するコメントです。

[W]最近のタスクをスワイプすると具体的に起こります:(1)アプリケーションのバックグラウンドまたは空のプロセスを強制終了します(http://developer.android.com/guide/topics/fundamentals/processes-and-を参照) threads.html#Lifecycle これの意味)、および(2)新しい http://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent)APIを 使用して、削除されるタスクに関するアプリケーションのサービス。これにより、適切であると思われるあらゆる処理を実行できます。

彼女はまた、ブログのコメントでメモしています

実際、最近のタスクでエントリを削除すると、そのプロセスに存在するバックグラウンドプロセスがすべて終了します。サービスが直接停止することはありませんが、タスクが削除されたことを確認して、停止する必要があるかどうかを判断するためのAPIがあります。これは、電子メールアプリの最近のタスクを削除しても、電子メールのチェックが停止しないようにするためです。

アプリを完全に停止する場合は、最近のタスクを長押ししてアプリ情報に移動し、そこで強制停止を押します。停止とは、アプリを完全に終了することです。すべてのプロセスが停止、すべてのサービスが停止、すべての通知が削除、すべてのアラームが削除などです。明示的に要求されるまで、アプリは再起動できません。

したがって、リストからアプリをスワイプすると、最初にアプリのすべてのバックグラウンドプロセスが強制終了され、次にonTaskRemovedバックグラウンドタスクが削除されたことをアプリに通知するという要約になります。その時点で、何が起こるかを決定するのはアプリ次第のように見えるので、技術的に、その点を超えてアプリに何が起こるかについての厳格なルールはないと思います。


それは確かに非自明の動作であり、非常に興味深いです!
マシューリード

「プロセスに存在するバックグラウンドプロセスを強制終了します。サービスが直接停止することはありません」。これはまだ本当ですか?昨日テストを実行しました。昨日、メインプロセスでバックグラウンドサービスを使用してアプリをスワイプしました。apps => running UIは、0プロセスと0サービスを示しました。その後、別のアプリケーション固有のプロセスで実行されているプロセスで同じアプリをスワイプしました。apps => running UIは、プロセスが0でサービスが1であると言いました。これは、Android 4.4.4を搭載したMoto X(2014)で行われました。
スティーブンウェクスラー

@StevenWexler:最初のケースではサービスが終了したが、2番目のケースでは終了しなかったか、2番目のシナリオではメインプロセスが(何らかの理由で)サービスを停止したくないと判断した可能性があります。確かにわかりにくい。
eldarerathis

開始されたサービスは、最近のリストからスワイプした後、自動的に再開され、onCreateが再度呼び出されます。ただし、一部のアプリでは、onTaskRemovedの前に呼び出されるonCreateと、onTaskRemovedの後に呼び出されるアプリがあります。なぜこの動作はなぜですか?
umesh

21

クラスcom.android.internal.policy.impl.RecentApplicationsBackgroundおよびcom.android.internal.policy.impl.RecentApplicationsDialogのソースコードにはいくつかの情報があります。

これらを正しく読むと、アプリを選択するための特定のハンドラーがありますがonDetachedFromWindow()com.android.View.onDetachedFromWindow()基本的に要素を非表示にしてデータをクリアするを除く、アプリをスワイプするための特別なハンドラーはありません。これは、リストにアクティブなアプリが表示されないためonPause()、アプリケーションを「終了」するときに行われるその他のシステムコールがあるため、アプリをスワイプしても特別なことは何も起こらないことを示唆しています。すでに起こった。


10

戻るボタンと同じことをすると思います。1つの小さな変更を除きます。それは意志finish()のアプリ内のすべての活動/フラグメント。

ちょっとしたセルフビルドアプリでちょっとしたテストをしただけです。テストもできます。私のテストアプリはここにあります:https : //bitbucket.org/Leandros99/lifecycletest(ダウンロードも可能です。ビルドできない人向けです。)
すべてのアクティビティライフサイクルメソッド(http://developer.android.com/reference/android/app /Activity.html#ActivityLifecycle)アプリにログを印刷します。adb logcatで表示できます(Android SDKをインストールし、cmd / shellでplatform-toolsにcdして入力しadb logcatます。今度は、戻るボタンやホームボタンなどの操作を行うたびに、アプリは上記のライフサイクルメソッドを出力します。 )

あなたの質問:最近のアプリドロワーからアプリをスワイプすると、onDestroyメソッドが呼び出されます。戻るボタンとほぼ同じです。
私が少し助けてくれたことを願っています。質問がある場合は、質問してください。


3

アプリと、RAMに保存されているそのデータを閉じます。したがって、他のアプリを実行できるように、より多くのRAMスペースを提供します。ただし、使用中のアプリを閉じた結果として、バックグラウンドサービスが自動的に強制的に閉じられることはありません。


1
日常的な言語で書かれていますが、これは実際にはかなり正確な回答です-プロセスが破棄され、他の多くの回答(誤って戻るボタンと比較するもの)が欠落しているという事実をキャプチャします。ただし、ここで不足しているのは、とにかくメモリを取得するために必要なときにAndroidがプロセスを破棄するという認識です。そのため、メモリのクリーンアップを実行しながら、必要な場合に自動的に行われます。
クリスストラットン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.