2017-06-12 4 views
0

public class MainActivity AppCompatActivity {erstrecktCursor gibt beim Zugriff auf Daten aus dem Benutzerwörterbuch in Android Fehler?

// For the SimpleCursorAdapter to match the UserDictionary columns to layout items. 
    private static final String[] COLUMNS_TO_BE_BOUND = new String[]{ 
      UserDictionary.Words.WORD, 
      UserDictionary.Words.FREQUENCY 
    }; 

    private static final int[] LAYOUT_ITEMS_TO_FILL = new int[]{ 
      android.R.id.text1, 
      android.R.id.text2 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Get the TextView which will be populated with the Dictionary ContentProvider data. 
     ListView dictListView = (ListView) findViewById(R.id.dictionary_list_view); 

     //TextView dictTextView = (TextView) findViewById(R.id.dictionary_text_view); 
     Cursor cursor = null; 
     try { 

      // Get the ContentResolver which will send a message to the ContentProvider. 
      ContentResolver resolver = getContentResolver(); 

      // Get a Cursor containing all of the rows in the Words table. 
      cursor = resolver.query(UserDictionary.Words.CONTENT_URI, null, null, null, null); 

      SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
        android.R.layout.two_line_list_item, 
        cursor, 
        COLUMNS_TO_BE_BOUND, 
        LAYOUT_ITEMS_TO_FILL, 
        0 
      ); 

      dictListView.setAdapter(adapter); 
     } catch (Exception e) { 
      e.getMessage(); 
     } finally { 
      cursor.close(); 
     } 

    } 

} 

/* Wenn ich die CUSOR dann Speicher Leckage auftreten nicht schließen. Aber es wurde vom Compiler nicht gezeigt! Ich möchte wissen, was genau hier passiert? Vielen Dank im Voraus! */

+0

Schließen Sie Cursor in einem Adapter erst, wenn Sie sie nicht mehr verwenden – tyczj

Antwort

0

Wenn wir einen Cursor öffnen, muss er geschlossen werden, da sonst im globalen Systembereich ein Speicherleck auftritt.
Ein Speicherverlust tritt auf, wenn ein Programm Speicher für eine Datenstruktur reserviert und dann diesen Speicher nie freigibt und diesen Speicher nicht wiederverwenden kann. Wenn das Programm das nächste Mal die Datenstruktur benötigt, weist es erneut mehr Speicher zu. Im Laufe der Zeit scheint der verfügbare Speicher zu schrumpfen und dies wird als "Speicherleck" bezeichnet. Speicherlecks werden dadurch überwunden, dass sichergestellt wird, dass der zugewiesene Speicher für eine Datenstruktur freigegeben wird, wenn Sie diese Datenstruktur nicht mehr verwenden

Verwandte Themen