我一直在尝试WeakReference
在我的 Android 项目中使用,但从未取得任何成功。现在我真的需要它,因为我正在处理旧设备,我必须尽可能保持内存清洁。
无论如何,我有一个数组,其中包含大约 1000 个不同字符串的列表。我需要加载它然后在其中找到一个字符串。
这就是我目前使用它的方式:
String[] campaignList = context.getResources().getStringArray(R.array.campaignList);
WeakReference<String[]> weakCampaignList = new WeakReference<String[]>(campaignList);
这是正确的使用方法WeakReference
吗?如果是,那么我不明白的是阵列正在水合,String[]
然后我将它传递给WeakReference
. 那么这是否意味着我在分配给一个数组的内存中有 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;
}