2012-03-13 10 views
3

Androidアプリをプログラミングしている間に(マーケットにアップロードされ、3k +アクティブなインストールで4,7の評価を得ている)、私は自分のアプリをさらにすばらしいものにする方法を知りました。私は、本当に新しい、世界的に変化する機能を追加することができなかったことを実感しました。そのため、パフォーマンスを検証し、すべてを最適化する方法、最適なCPU /メモリ使用率を見つける方法などを始めました。Androidコンストラクタ

とにかく、私は、非常に論理的な画面を回転させた場合にonCreateが実行されることがわかりましたが、回転ごとにやり直す必要はありません。このうちの1つは、6500行のcsvを反復処理し、4つの列を持ち、2つは常にいくつかのデータを含み、2つは常にそうではありません。データを含む2列はオートコンプリート・アダプターに使用され、別の2はフィーチャーではオプションですが、まだ初期化する必要があります。現在のところ、これはasynctaskで実行されており、onCreateの最後にトリガされ、かなり良いCPUを持つ私のHTC Desire Sで約3秒かかります。したがって、ローエンドのデバイスは回転ごとにより長い初期化時間を持ちます確かに私は望んでいない...それはUIをクラッシュされませんが、秒が終わるまでオートコンプリートはありません。

だから私の質問は、いくつかの別のメソッド(例えば、標準javaのようなコンストラクタ)でこれを行うことができますか?それとも、アクティビティの特別なライフサイクルなので悪い習慣ですか?つまり、コンストラクタが実行されるように自分のアクティビティをインスタンス化し、その後すぐにonCreateが実行されます。回転の場合、私の "コンストラクタ"は再び実行されませんが、onCreateは実行されます。安定性は依然として私の目標である。または、これを行うには良い方法がありますか?これとまったく同じように作成されたものですが、これはわかりません。私はこの問題で多くのことを改善したいと思っています。私は本当にこれにいくつかの助けに感謝します。経験を積んだ人から好きですが、助けてください!

startActivity(new Intent(context, MyActivity.class)); 
:このような何かを終了する、

new MyActivity(some parameters); 

ので、コンストラクタが実行されます:私はこの方法で新しいアクティビティを作成したい場合:)

は例えば、私はそれをこのような何かをするだろう

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

は恩赦私は、構文イム間違っている場合、私はちょうどそれをfasttyped :)

答えて

1

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

+0

このロジックを初期化アクティビティ – hundeva

0

あなたは、アクティビティが再作成された後にアクセスできるオブジェクトを返すことができるonRetainNonConfigurationInstanceを見ることができます。あなたは単にonCreateの処理結果をすべて含むオブジェクトを返します。 getLastNonConfigurationInstance()があり、すべてを再計算しないでください

+0

に分けることにしました。正しく理解すれば、このメソッドでいくつかの変数にマークを付けることができます破壊されましたが、いつでも再評価できます。 – hundeva

関連する問題