WeakReference
私は自分の Android プロジェクトで使用しようとしてきましたが、成功したことはありません。今、私は古いデバイスを扱っており、メモリをできる限りクリーンに保つ必要があるため、本当に必要です。
とにかく、さまざまな文字列のリストが約1000個ある配列があります。それをロードしてから、その中の文字列を見つける必要があります。
これは私が現在それを使用している方法です:
String[] campaignList = context.getResources().getStringArray(R.array.campaignList);
WeakReference<String[]> weakCampaignList = new WeakReference<String[]>(campaignList);
これは正しい使用方法WeakReference
ですか?はいの場合、私が理解できないのは、配列が で水和されString[]
、それを に渡すことWeakReference
です。これは、1 つの配列に割り当てられたメモリに 2 つのスポットがあることを意味しませんか? それとも私はWeakReference
概念を完全に誤解していますか?
すべてのリソースの中で見つけた非常に優れたリソースは次のとおりです。
http://neverfear.org/blog/view/150/Strong_Soft_Weak_and_Phantom_References_Java
編集:
私のコードは問題なく動作します。パフォーマンスの点で正しいことをしているかどうかを知る必要があります。
for (int i = 0; i < weakCampaignList.get().length; i++) {
Log.d(TAG,"weakCampaignList: "+weakCampaignList.get()[i]);
}
私のメソッド全体
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;
}