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。重要的是框架何时调用各种回调以及您必须在其中做什么。

如果您需要在 Activity 到达前台时执行某些操作,或者您想在 Activity 的 Looper 中执行某些操作(例如位置更新),则必须覆盖 onResume。如果您需要自己清理,则必须实现 onPause。

我一般不实现 onDestroy 因为不保证会被调用。

于 2011-03-22T21:35:31.850 回答
0

实际上,在需要数据库时打开和关闭可能会更好。虽然它不会影响您的情况,但某些手机(三星 Galaxy S)的数据库可能非常慢,并且打开多个连接(例如在活动和服务中)确实会减慢速度......(我看到 1s 写入时间!!)

于 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 回答