Mit WeakReferences in Java

Ich habe versucht, zu verwenden WeakReference in meiner Android-Projekte, und ich hatte noch nie ein Erfolg. Jetzt habe ich wirklich brauchen, wie ich es bin den Umgang mit alten Geräten und ich habe, um die Erinnerung zu reinigen, so viel wie ich kann.

Sowieso, ich habe ein array, das über 1000 Liste der verschiedenen Zeichenfolgen. Ich brauche, um es zu laden, dann finden Sie einen string in es.

Dies ist, wie ich bin derzeit mit es:

String[] campaignList = context.getResources().getStringArray(R.array.campaignList);
WeakReference<String[]> weakCampaignList = new WeakReference<String[]>(campaignList);

Ist dies der richtige Weg, mit WeakReference?
Wenn ja, dann was ich nicht verstehe ist, das array ist immer hydratisiert an String[] und dann gebe ich es an die WeakReference. Also das heißt ich habe 2 Flecken auf den Speicher für ein array? Oder ich bin völlig Fehlinterpretation des WeakReference Konzept?

Eine sehr gute Quelle, die ich gefunden unter all den Ressourcen, ist dieses hier:

http://neverfear.org/blog/view/150/Strong_Soft_Weak_and_Phantom_References_Java

Edit:

Mein code funktioniert ohne Problem. Müssen nur wissen, wenn ich bin, es zu tun korrekt, in Bezug auf Leistung.

for (int i = 0; i < weakCampaignList.get().length; i++) {
  Log.d(TAG,"weakCampaignList: "+weakCampaignList.get()[i]);
}

Meine Gesamte Methode

public static String getTheCampaign(String country, Context context) {
        String campaign = "";
        campaign = "annual_subscription_" + country;

        String[] campaignList = context.getResources().getStringArray(
                R.array.campaign_list);

        ArrayList<WeakReference<String>> weakCampaignList = new ArrayList<WeakReference<String>>();
        for (String s : campaignList) {
            weakCampaignList.add(new WeakReference<String>(s));
        }

        if (country.equals("") || country.isEmpty()) {
            campaign = "annual_subscription_us";
        } else {
            for (int i = 0; i < weakCampaignList.size(); i++) {
                if (weakCampaignList.get(i).get().contains(campaign)) {
                    campaign = weakCampaignList.get(i).get();
                    return campaign;
                } 
            }
        }
        return campaign;
    }
  • Befolgen Sie bitte die Java-Namenskonventionen. Es ist weakCampaingList und campaingList, nicht weak_campaing_list und campaingList. Auch das Wort, das Sie wahrscheinlich suchen, ist geschrieben-Kampagne.
  • Feste mate. Dank
  • Es ist immer noch nicht klar, was die Objekte, die Sie behalten möchten, in den Speicher und unter welchen Umständen ist es okay für Sie, um GC würde. Ohne diese Informationen, es gibt auch kaum jemand helfen können.
  • oohhh ok, jetzt bin ich mit Ihnen, ich brauche zu halten, die campaignList.
  • Sind Sie versuchen, zu implementieren, schwache Referenzen, oder versuchen Sie, die Verwendung schwacher Referenzen? Würden Sie implementieren müssen, um schwache Referenzen, wenn die Dalvik-VM hat nicht eine WeakReference Klasse für Sie zu verwenden (finde ich unwahrscheinlich), das erfordert die intime Kenntnis und die integration insbesondere mit dem garbage collector auf dem system.
  • Ja, ich bin zu versuchen, die WeakReference. In fast jedem Dokument, das ich gelesen habe, fand ich, dass jeder darauf hindeutet WeakReferences oder SoftReferences sind eine gute Möglichkeit, verwenden Sie für das Speicher-management. In dem link, den ich in die Frage. Jetzt bin ich mehr verwirrt. Ist gut zu verwenden WeakReference im Android-Entwicklung? Ist es das, was Sie meinen, wenn Sie erwähnen "WeakReference-Klasse": import java.lang.ref.WeakReference; dann ja.
  • Ich glaube, Sie haben Ihre Terminologie Durcheinander. Android bietet einen WeakReference - Implementierung, so dass Sie nicht brauchen, um Ihre eigenen. Sie können einfach verwenden Sie die eine, die bereits zur Verfügung gestellt.
  • also basierend auf was Sie sich beziehen, Bin ich die Umsetzung richtig? Oder bin ich wieder vom Thema abgekommen.
  • ein vollständiges Beispiel finden Sie unter: javacodegeeks.com/2014/03/...

InformationsquelleAutor Mr H | 2013-06-07
Schreibe einen Kommentar