6

この質問が少し主観的であることは理解できますが、具体的な答えがあると思います。

ListActivity でユーザーにデータを表示するだけの非常に小さなアクティビティがあります。私が使用するデータは、アプリの SQLite データベースから取得されます。

public class MainActivity extends ListActivity{
     private DatabaseAdapter dbHelper;
     @Override
     public void onCreate(Bundle b){ 
          dbHelper = new DatabaseAdapter(this);
          super.onCreate(b); 
     }

     @Override
     public void onResume(){
            dbHelper.open();
            fill_data();//a small method that uses dbHelper to setListAdapter
            super.onResume();
       }

     @Override
     public void onPause(){
          dbHelper.close();
          super.onPause();
     }

     private void fill_data(){/*makes use of dbHelper */ }

これはほとんど不要なコードですか?MainActivity が最上位にない場合に最小限のリソースを使用できるように、ライフサイクルを処理したいのですが、同時に、このアクティビティ全体を で実行できますonCreate()

4

3 に答える 3

5

使用するたびに dbHelper を開いて閉じるだけであれば、おそらく onPause メソッドをオーバーライドしなくても済むでしょう。ヘルパーを開くのはそれほど手間がかからないので (私は SQLiteOpenHelper を想定しています)、時期尚早の最適化と考えるかもしれません。

とにかく、ほとんどの場合、onCreate をオーバーライドする必要があり、多くの場合 onResume をオーバーライドし、場合によっては onPause をオーバーライドします。重要なのは、フレームワークがさまざまなコールバックを呼び出すタイミングと、その中で何をする必要があるかです。

アクティビティがフォアグラウンドに達したときに何かをする必要がある場合、またはアクティビティのルーパーで何かをしたい場合 (たとえば、位置情報の更新)、onResume をオーバーライドする必要があります。自分でクリーンアップする必要がある場合は、onPause を実装する必要があります。

呼び出されることが保証されていないため、通常は onDestroy を実装しません。

于 2011-03-22T21:35:31.850 に答える
0

実際には、データベースが必要なときに開いて閉じるだけの方がよいでしょう。あなたのケースには影響しませんが、一部の携帯電話 (Samsung Galaxy S) は非常に遅いデータベースを持っている可能性があり、(アクティビティやサービスなどで) 複数の接続を開いていると、物事が本当に遅くなります... (1 秒の書き込み時間を見ました!!)

于 2011-03-22T21:59:52.280 に答える
0

データベースの開閉には時間がかかるため、別のスレッドで行う必要があります。この講演と PDF の詳細: http://www.google.com/events/io/2010/sessions/writing-zippy-android-apps.html

したがって、さらに多くのコードを記述する必要があります。:P

于 2011-03-22T22:04:11.097 に答える