0

HTC one X でテストしているアプリケーションがあります。

簡単な説明:

私の主な活動は、タブ化されたアプリケーション (フラグメントを使用) です。タブの1つに、ユーザーを別のアクティビティに移動させるボタンがあります

Intent myIntent = new Intent(view.getContext(), NoteActivity.class);
startActivity(myIntent);

これはすべて正常に機能します。しかし、NoteActivity にはテキストフィールドがあり、画面ロックがオンになると NoteActivity はすぐに破棄され、ユーザーがロックを解除すると、「メイン」アクティビティがすぐに開始されます。

また、mainactivity -> noteactivity から移動すると、mainactivity が破棄されることはありませんが、戻ると (ユーザーがメモを終了して [保存] をクリックすると)、noteactivity は常にすぐに破棄されます。

どうやら、テキスト フィールドの内容を ondestroy に保存して、oncreate に再挿入する必要があるようですが、画面ロックがアクティブになると 2 番目のアクティビティが常に破棄される理由がわかりません。私の主な活動は決して破壊されません。

Android がこれらのライフサイクルの決定を行う理由については、少し確信が持てません。誰かが意見を持っているなら、私はそれを聞きたいです.

4

1 に答える 1

0

多くのプラットフォーム/言語では、開発者がメモリの管理を担当しています。これにより、多くのバグやパフォーマンスの問題が発生します。Android の設計者は、おおむね、この責任を開発者から OS に移しました。Android は、アクティビティがフォアグラウンドにないときはいつでもアクティビティを破棄できます。したがって、アクティビティがバックグラウンドに移行する前に呼び出される onPause() が用意されています。

Android があなたのアクティビティを破壊する理由は決定的ではなく、さまざまな要因に依存します。デバイスのメモリ量。空きメモリの量。実行中の他のアプリやサービス。どのようなカーネル ガバナーと省電力ポリシーが使用されているかなど、この決定要因を作成するのは大規模で複雑なタスクになるため、アクティビティがバックグラウンドに移行すると、Android がアクティビティを破棄する可能性があり、それ以上のコールバックがないこともあります。そのため、ライフサイクルを使用して、必要に応じて状態を保存および復元する必要があります。

慣れてしまえば、実に理にかなっており、操作も簡単です。私は Windows のバックグラウンドを持っていて、慣れるまでに時間がかかりますが、今ではそれがわかり、問題ありません。良いとも悪いとも言いませんが、モバイル デバイスには良いソリューションです。

デスクトップ OS の習慣的な考え方から、最初はタスク マネージャーを探してアプリで system.exit() などを実行するようになりましたが、Android をそのままにして、はるかに優れたパフォーマンスを発揮するようにしました。

ライフサイクルとともに生きる。

于 2012-11-01T10:20:40.103 に答える