我有一个属性文件存储在资产文件夹的Android项目。我需要在每次需要值时避免该文件的I/O读取,以便第一次加载文件并将其保存在静态字段中。请记住,这是一款在嵌入式平板电脑上“始终运行”的应用程序,因此基本上没有生命周期。这是我对本作的实现:在内存中的Android缓存属性文件,以避免I/O
Properties.java:
private static java.util.Properties properties;
private static Context mContext;
public static void init(Context context) {
mContext = context.getApplicationContext();
if(properties == null){
AssetManager assetManager = context.getAssets();
InputStreamReader reader = null;
try {
reader = new InputStreamReader(assetManager.open("path_to_prop_file"), "UTF-8");
properties = new java.util.Properties();
properties.load(reader);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static String get(String entry){
try {
return properties.getProperty(entry);
} catch (Exception e){
init(mContext);
return properties.getProperty(entry);
}
}
然后我把它从活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Properties.init(getApplicationContext());
String property = Properties.get("prop_key");
}
我是缓存也语境的情况下,属性文件需要被重新加载。我可以将上下文作为参数传递给“Get”方法,但是我需要在应用程序中随处读取属性,并且我不想通过所有类传递上下文。 我想知道如果这个实现是好的,并且在我的情况下关于上下文的泄漏是危险的。 任何建议被理解
EDIT 1:最后块中追加关闭读者所建议
考虑关闭你的阅读器在finally块 –
@NicolasFilotto当然我会感谢 – Nem3sis