3

Android アプリをしばらくプログラミングした後 (1 つは市場にアップロードされ、4,7 の評価で 3,000 以上のアクティブなインストールがあります)、どうすれば自分のアプリをさらに素晴らしいものにすることができるか疑問に思い始めました。本当に新しい、世界を変える機能を追加することはできないことに気づき、パフォーマンス、ほぼすべてを最適化する方法、最適な CPU/メモリ使用率を見つける方法などを調べ始めました。

とにかく、画面を回転させる場合に onCreate が実行されることがわかりました。これは非常に論理的ですが、いくつかの(大きな)計算があり、回転するたびにやり直す必要はありません。これの 1 つは、4 つの列を持つ 6500 行の csv を反復処理することです。データを含む 2 列はオートコンプリート アダプターに使用され、別の 2 列は機能のオプションですが、初期化する必要があります。現在、これは onCreate の最後にトリガーされる asynctask で実行され、非常に優れた CPU を備えた HTC Desire S で約 3 秒かかります。確かに私は望んでいません... UIがクラッシュすることはありませんが、その秒が終わるまでオートコンプリートはありません。

SO:私の質問は、コンストラクター(標準のJavaのような)などの別のメソッドでこれを行うことができますか、それともアクティビティの特別なライフサイクルのため、それは悪い習慣ですか?つまり、「コンストラクター」が実行される方法でアクティビティをインスタンス化し、その直後に onCreate が実行されます。ローテーションの場合、私の「コンストラクター」は再び実行されませんが、onCreate は実行されます。安定性は私の一番の目標です。または、これを行う良い方法はありますか?これとまったく同じように作成されたもので、私が気づいていないものは何ですか? 私は本当にこの問題で多くのことを改善したいと思っています。できればこの経験のある人からの助けを本当に感謝していますが、どんな助けも大歓迎です! :)

たとえば、この方法で新しいアクティビティを作成したい場合は、次のようにします。

new MyActivity(some parameters);

コンストラクターが実行され、次のように終了します。

startActivity(new Intent(context, MyActivity.class));

このようにして、コンストラクターが実行され、変数が初期化され (ビューなどに接続されません)、その後、アクティビティは必要なときにいつでも onCreate 変数を実行できます。

構文が間違っている場合はご容赦ください。ファストタイプしただけです:)

4

2 に答える 2

1

このロジックをアクティビティから分離する必要があります。これを行うには多くの方法がありますが、最終的な目標は、csv の解析を別のクラスで行うことです。このクラスは、データが既に解析されているかどうかに関する情報を公開する必要があります。したがって、onCreate では、クラスを呼び出してデータを取得します。既に存在する場合は、キャッシュされたデータをすぐに取得します。メソッドが初めて呼び出された場合、または何らかの理由でキャッシュがクリーンアップされた場合は、csv ファイルを解析し、必要な計算を行います。

于 2012-03-13T15:59:51.473 に答える
0

アクティビティが再作成された後にアクセスできるオブジェクトを返すことができるonRetainNonConfigurationInstanceを見ることができます。そのため、onCreate のすべての処理結果を含​​むオブジェクトを返すだけで、次回は getLastNonConfigurationInstance があるかどうかを確認できます。 () - すべてを再計算しない

于 2012-03-13T16:01:50.360 に答える