1

まず第一に、私はAndroid開発に不慣れです...私はAndroid APIガイドのいくつかの記事を読んだことがあり、ホスティングプロセスとのコンポーネントのライフサイクルについて混乱していると感じています。

これが私の理解です:

  1. Androidシステムは、メモリ不足の状況でプロセス内の一部のアクティビティまたはプロセス全体を強制終了する場合があります。つまり、開始されたアクティビティが停止する可能性がありますが、プロセスはまだ生きています。

  2. サービスが開始され、停止メソッドを呼び出さない場合、メモリが極端に少ないときに、このサービスは、サービス自体だけでなく、ホスティングプロセスを使用してシステムによって強制終了されます。つまり、この状況は発生しないはずです。サービスはシステムによって強制終了されますが、ホスティングプロセスはまだ生きています。

  3. アプリが起動すると、ユーザーはactivity1-> activity2-> activity3に移動し、finish()を呼び出すことはありません。次に、ユーザーは別のアプリのアクティビティに移動し、前のアプリのプロセスがシステムによって強制終了されるまでそのアクティビティを操作します。これで、ユーザーはバックトラッキングスタックのactivity3に戻りますが、どうなりますか?以前のアプリプロセスは、activity3の再作成のみで再起動しますか?

何か問題がありますか?

4

2 に答える 2

2

別のアプリのアクティビティに切り替える必要はありません。最初のアクティビティを離れた瞬間から2番目のアクティビティに移動します。最初のアクティビティが2番目のアクティビティ(バックトラッキング)から戻ったときに破壊された可能性があり、3番目のアクティビティに移動したときに、最初のアクティビティ、2番目のアクティビティ、またはその両方が破壊された可能性があります。その間に破壊されました。実際、あなたはそれが破壊されるのを見るために活動を離れることさえしません。これは、デバイスを回転させてポートレートモードからランドスケープモードに、またはその逆に切り替えると自動的に発生するためです。

アクティビティに戻ると、その間にアクティビティが破棄されていない場合は、onRestart()関数が呼び出されます。含まれている場合は、代わりに「onCreate(Bundle savedInstanceState)」が呼び出されますが、保存の予防策を講じている場合は、引数「savedInstanceState」がnull以外の値に設定されます(つまり、有効なBundleオブジェクトを指します)。アクティビティがシステムによって破棄されるプロセスに入ったときの「onSaveInstanteState(BundleoutState)」関数のアクティビティの現在の状態。後でバックトラッキングのためにアクティビティを復元する必要がある場合、システムはアクティビティを破棄する前に常にこの関数を呼び出します。もちろん、finish()の呼び出し後には呼び出されません。これにより、バックトラッキングスタックからアクティビティも削除されるためです。

最後に、Androidでは、同じアプリケーション内のアクティビティ間の結合は非常に緩いです。リソースの使用に関しては、同じアプリケーションからのアクティビティへの切り替えと別のアプリケーションからのアクティビティへの切り替えに大きな違いはありません。多くの点で、アクティビティは、実行に関しては完全に独立したアプリケーションがすべて存在するかのように動作します。これが、アクティビティを開始するために常にインテントを使用する必要がある理由です。同じアプリケーションからのものであっても。

于 2012-11-15T05:36:04.367 に答える
1

私の理解に基づいて...

  1. 低メモリの状況でのAndroidでは、最初のアクティビティはonDestroyメソッドが呼び出されるメモリから削除されます。

  2. これは常にそうであるとは限りません。これは、サービスがどのように開始されるか、つまり、onStartからか、サービスをコンポーネントにバインドするかによって異なります。

  3. 以前のアプリプロセスが強制終了された後、ユーザーがアプリケーションを起動すると、アクティビティ1に移動します。同じタスクまたは別のタスクでアクティビティを起動するかどうかは、使用する起動モード(単一のタスクなど)によって異なります。

于 2012-11-15T03:29:12.273 に答える