我在我的应用中使用以下代码:
string_array = getResources().getStringArray(R.array.array_of_strings);
my_text_view.setText(string_array[i]);
问题是我多次启动包含此代码的活动。 所以,我觉得这个代码是低效的,因为每次我开始活动时我必须加载整个数组才使用一个元素,因为字符串数组非常大。
有没有办法直接加载想要的元素?
提前多多感谢:)
更新: 我尝试使用Application对象,如下面Talihawk所述,但我在以下行收到错误:
MyApplication my_obj = (MyApplication) getApplication();
string_array = my_obj.getStringArray();
错误是:
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
答案 0 :(得分:9)
只要应用程序处于活动状态,就可以使用Application对象保存字符串数组。
**编辑**
首先,您必须在AndroidManifest.xml中定义自定义Application类:
<application
android:name="MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name"
>
**编辑**
public class MyApplication extends Application {
private String[] string_array;
@Override
public void onCreate() {
super.onCreate();
string_array = getResources().getStringArray(R.array.array_of_strings);
}
public String[] getStringArray() {
return string_array;
}
}
在您的活动中,只需:
string_array = ((MyApplication) getApplication()).getStringArray();
my_text_view.setText(string_array[i]);
这样你的字符串数组只会在你的应用程序持续时间内被加载一次(如果你的应用程序被杀了,你还是必须重新加载它)
您可以在以下link
中找到更多信息答案 1 :(得分:1)
答案 2 :(得分:1)
您可以使用静态方法创建一个辅助对象来加载/返回字符串数组,因此只能加载一次。如果你想得到真正的幻想,你可以将它声明为软或弱引用,这样它就不会占用内存,但那是你的调用......取决于数组和应用程序的大小。
public class StringHelper {
private static String[] stgArray;
public static String[] getMyStringArray( Context ctx ) {
if ( stgArray == null ) {
stgArray = ctx.getResources().getStringArray(R.array.array_of_strings);
}
return stgArray;
}