2012-03-28 6 views
0

私は既に私の問題を解決するためにgoogleとここでstackoverflowを見つけようとしましたが、何も私の質問に答えることができませんでした。 sqliteデータベースを使用してリストビューにデータを設定します。また、リストビューの上には、別のアクティビティに切り替えることができるタブホストがあります。そのアクティビティに切り替えてからリストビューに戻ると、リークが検出されます。しかし、どんな試みがあっても、明らかに漏れがあります。誰かがその漏れを見つけるのを助けることができますか?ここでtabhostとlistview sqliteデータベースの原因リーク

は、リストビューの活動です:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contacts); 

     contactlist = (ListView) findViewById(R.id.list); 

     entry.open(); 
     c = entry.getData(); 
     startManagingCursor(c); 

     String[] from = new String[] {"_id", "firstname", "lastname"}; 
     int[] to = new int[] {R.id.iVPI, R.id.tvfirstName, R.id.tvlastName}; 

     adapter = new MySimpleCursorAdapter(this, R.layout.contacts_list_item, c, from, to); 
     contactlist.setAdapter(adapter); 

     contactlist.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(contacts.this, contactsdetails.class); 
       Cursor cursor = (Cursor) adapter.getItem(position); 
       intent.putExtra("ID", cursor.getInt(cursor.getColumnIndex("_id"))); 
       c.close(); 
       startActivity(intent); 
      } 
     }); 
    } 

    protected void onStart() { 
     super.onStart(); 
     entry.open(); 
    } 

    protected void onPause() { 
     super.onPause(); 
     entry.close(); 

    } 
    protected void onStop() { 
     super.onStop(); 
     entry.close(); 
    } 
    protected void onDestroy() { 
     super.onDestroy(); 
     entry.close(); 
    } 

tabhostactivityは非常に簡単です:

th = getTabHost(); 
     th.addTab(th.newTabSpec("tag1").setIndicator("Contacts", getResources().getDrawable(R.drawable.book)).setContent(new Intent(this, contacts.class))); 
     th.addTab(th.newTabSpec("tag2").setIndicator("Profile", getResources().getDrawable(R.drawable.mailbox)).setContent(new Intent(this, incomingcallpopup.class))); 
     th.setCurrentTab(0); 

誰がリークを見つけることができますか?

ご協力いただきありがとうございます。

+0

リークはどのように報告されていますか? eclipse用のMemory Analyzer Toolプラグインを試してみてください。これは、さらに多くのデータとともに漏れたオブジェクトを教えてくれます。 – Bondax

答えて

1

contacts.classとincomingcallpopup.classのソースを取得できますか?

問題は、タブ間を切り替えるときに2回dbに接続しようとすることです(最初のタブでdb接続を終了しないと問題が発生します)。

2つのSlqHelpersを1 dbにして同時に使用すると、私のプロジェクトでこの問題が発生しました。

+1

ありがとうございます。私はincomingcallpopup.classで愚かな間違いを犯しました。ここで私はデータベースを閉じてしまいました。あまりにも私のコードを見てあなたの時間がかかったことに感謝したいと思います。 – Max

関連する問題