Androidフォンで「ホーム」ボタンを押すと、実行中のプログラムはどうなりますか?


27

一つのことは私を困惑させます。Androidでプログラムを使用して「ホーム」ボタンを押すと、ホーム画面が表示され、プログラムを再実行して、以前と同じ状態でそのプログラムを表示できるように見えます-そのため、プログラムが完全に再起動されていないようです一時停止してから再開しました。

しかし、それはAir Controlゲームで一貫して起こるとは思えません。時々、Air Controlをプレイして「ホーム」を押してから後でAir Controlを再実行すると、一時停止され(「一時停止」ボタンを押したように)、ゲームを再開できます。時々、同じことがAir Controlがゲームを落とし、新たに開始することにつながります。

だから、私は何かを理解していないようです。

ここでの取引は何ですか?「ホーム」を押すと、プログラムはどうなりますか?実行を継続しますか、それとも何をしますか?


ホームボタンを押すと、消費電力が大きくなるとは思いません。
フロー

回答:


12

を押すと、Homeアプリをバックグラウンドで実行したまま、アプリからホーム画面に切り替わります。これは、Windows PCでウィンドウを切り替えるようなものです。

スマートフォンのメモリなどのリソースが不足している場合を除き、バックグラウンドで実行されているアプリの終了が開始されるため、携帯電話には今やろうとしていることに対して十分なリソースがあります。多くの場合、ゲームは他のアプリよりも多くのメモリとCPUを使用するため、リソースを節約するために電話が「殺す」最初のアプリの1つです。これが、ゲームが一時停止したままで実行されたり、Androidがゲームを閉じたりする理由です。

Backボタンは、彼らが実際に閉鎖されているように、近くのアプリケーションへの道です。

参照してくださいAndroidの中の近くのアプリケーションへの正しい方法は何ですか?


26

Android開発ドキュメントのタスクとバックスタックは、実際にこれを非常にうまくカバーしています。関連する抜粋:

タスクとは、ユーザーが新しいタスクを開始したとき、またはホームキーを使用してホーム画面に移動したときに「バックグラウンド」に移動できるまとまりのあるユニットです。バックグラウンドでは、タスク内のすべてのアクティビティは停止しますが、タスクのバックスタックはそのまま残ります。図2に示すように、タスクは別のタスクが行われている間にフォーカスを失います。ユーザーが中断したところから再開できるようにします。たとえば、現在のタスク(タスクA)のスタックに3つのアクティビティがあり、2つが現在のアクティビティの下にあるとします。ユーザーは、HOMEキーを押して、アプリケーションランチャーから新しいアプリケーションを起動します。ホーム画面が表示されると、タスクAがバックグラウンドになります。新しいアプリケーションが開始されると、システムはそのアプリケーションのタスク(タスクB)を独自のアクティビティスタックで開始します。そのアプリケーションと対話した後、ユーザーはホームに戻り、タスクAを最初に起動したアプリケーションを選択します。タスクAがフォアグラウンドになります。スタック内の3つのアクティビティはすべてそのままで、スタックの最上部のアクティビティが再開します。この時点で、ユーザーはホームに移動し、そのタスクを開始したアプリケーションアイコンを選択して(または、ホームキーを押し続けて最近のタスクを表示して選択することで)タスクBに切り替えることもできます。これは、Androidでのマルチタスクの例です。ユーザーは、ホームに移動してそのタスクを開始したアプリケーションアイコンを選択する(または、ホームキーを押し続けて最近のタスクを表示して選択する)ことにより、タスクBに戻ることもできます。これは、Androidでのマルチタスクの例です。ユーザーは、ホームに移動してそのタスクを開始したアプリケーションアイコンを選択する(または、ホームキーを押し続けて最近のタスクを表示して選択する)ことにより、タスクBに戻ることもできます。これは、Androidでのマルチタスクの例です。

注:複数のタスクを一度にバックグラウンドで保持できます。ただし、ユーザーが多数のバックグラウンドタスクを同時に実行している場合、システムはメモリを回復するためにバックグラウンドアクティビティの破棄を開始し、アクティビティの状態が失われる可能性があります。アクティビティの状態については、次のセクションをご覧ください。

概要:タスクを押すHomeと、メモリ内に座ったときにバックグラウンドに移動します。実際には何もせず、その状態を保持します。これは、(一般的に言えば)タスクに戻ることができ、中断したところから再開することを意味します。ただし、Androidシステムはメモリを解放する必要がある場合、バックグラウンドタスクを強制終了できます。これがいつ起こるかは完全にシステム次第であり、おそらく再開するときに一貫性のない動作を見る理由です。

タスクがシステムによって破壊された場合、タスクを再度起動したときにタスクを再作成する必要があります。そのため、アプリケーションの作成者が破棄プロセス中にアプリケーションの状態を保存するための対策を講じない限り、アプリケーションの状態は失われます(そして、ゲームのようなもので正確な状態を保存することはかなり非現実的です)。

もう1つの優れた(ただし冗長な)ドキュメントは、アクティビティライフサイクルをカバーするドキュメントです(少し下にスクロールすると、素晴らしいフローチャートがあります)。


そのため、アクティビティ/プロセスごとではなく、タスクごとに殺されます。後者は部分的なタスクの強制終了を許可しますが、これはおそらく望ましくありません。
ジグガンジャー16

4

Homeキーを 押すと、ユーザーはランチャーを表示して新しいタスクを開始できます。すべてのアクティブなタスク(したがって、「Air Control」の例を含むアクティビティ)はメソッドを呼び出しますonPause()

表示されるようになったときに正確な以前の状態を復元するのは、アプリ(およびそのアクティビティ)の役目です。また、アクティビティがバックグラウンドにあるときにAppsプロセスが強制終了される可能性もありますが、これはユーザーエクスペリエンスに影響を与えません。ユーザーは、アクティビティが一時停止されただけなのか、それとも強制終了されたのかを区別できないはずです。これにより、Air Controlのさまざまな動作を説明できます。これは、Androidライフサイクル管理の実装の欠陥のヒントになる可能性があります。


「殺された」とは、破壊されたのではなく、止められたという意味だと思います。通常のLinuxの用語では、プロセス(アクティビティなど)をdestroy()強制終了すると、対応するアプリコンポーネントになります。
ジグガンジャー16

いいえ、破壊されたということです。
フロー

ホームキーを押すと、onStopメソッドが呼び出されます。強制終了されたプロセスは、アクティビティがそのonDestroyedメソッドを呼び出すことを意味するわけではありませんが、実際には同様です。アクティビティプロセスを「殺す」とは、VMがRAMから削除されることを意味します。私にとって、これ(Androidによる強制終了)はユーザーエクスペリエンスに影響を与える可能性があります。
ジグガンジャー16

4

このサイトでの私の評判はまだ低すぎて投票できないため、Flowの回答を強調しています。私はアプリのいずれかでこの問題に遭遇し続けています。さまざまなスピナーコントロールがあり、それらの状態をonPause()で明示的に保存してからonResume()で状態を復元する必要があります-Androidはそれらの状態を自動的に記憶しません。

別の問題は、onResume()の呼び出しのみを期待しているときに、AndroidがアプリのonCreate()関数を呼び出す場合があることです。

そのため、Air Control(または他のアプリ)の問題はそのアプリに固有のものであり、修正のために動作を開発者に報告する必要があります。ほとんどのアプリには、マーケットに連絡先メールがあります。

ところで、アプリのライフサイクルを理解したい場合は、Ed BurnetteのHello、Androidの第2章、特に図2.3をお勧めします。


3

アプリ内でホームボタンを押す:

ほとんどのアプリは状態(再開時に一貫性を保つために必要なデータ)を保存し、デバイスはランチャーアプリに切り替わります。

ホームボタンホーム画面で押した場合:

これは、多くのサードパーティランチャーによって構成可能です。ただし、それらの多くはデフォルトで「メイン」ホーム画面に戻ります(デフォルトのランチャーがこれを行います)。

あなたの友人が心配するかもしれないもの:

アプリの切り替えはメモリを集中的に使用する可能性があり、データを保存するために複数のディスク書き込みが発生する可能性があります。これはバッテリーを使用します。ただし、通常、デバイスのバッテリー消耗の主な原因ではありません(オペレーティングシステムはこれらのことを行うために最適化されています)。

一部のアプリケーションは引き続きバックグラウンドアプリケーションとして実行されるため、ホームボタンを押してもアプリケーションは強制終了されません(たとえば、ホームボタンを押した後もGoogle Playミュージックは再生されます)。

友人は、ホームボタンを押してもプログラムを終了しなかったため、まだ実行中であることを心配している可能性があります。Androidは必要に応じてこれらのアプリケーションをアンロードします。

あなたとあなたの友人は、より多くの電力を使用するディスプレイにもっと関心を持つべきです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.