我在 Java 中对静态对象进行了大量的 Google 搜索,我想我了解它们在 Android 中的工作原理。当应用程序的进程终止时,静态对象会被 GC,而不是在声明静态对象的 Activity 被销毁时(如果我错了,请纠正我)。我有一个带有 Tabhost 的应用程序,其中使用了 Fragments。声明对象的Fragment一直在ViewPager的右边(共有三个Fragment)。右侧的选项卡有一个显示用户数据的 ListView,我希望当用户滑过所有选项卡或导航离开应用程序时,这些数据仍然存在。这些数据不需要保存,只需要通过应用程序的正常使用保留在内存中。给我想要的结果的修复方法是为我的阵列适配器设置一个静态前缀。我的问题是,这被认为是好的做法吗?我知道错误地使用静态对象会导致内存问题,但是我没有得到任何广泛使用的 FC(横向到纵向一遍又一遍,快速浏览选项卡,向 ListView 添加大量数据等)。这是我正在使用的代码
static ArrayAdapter<String> arrayAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment,
container, false);
if (personList == null)
{
personList = new ArrayList<String>();
}
if (arrayAdapter == null)
{
arrayAdapter = new ArrayAdapter<String>
(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, personList);
}
编辑:
这就是我实现这个想法的方式。我在我的主 Activity 中有这段代码(它是标签片段的父项。我把这段代码放在 Activity 的 onDestroy() 方法中,以尝试回收一些内存。
@Override
protected void onDestroy() {
super.onDestroy();
if (arrayAdapter != null)
{
arrayAdapter.clear();
arrayAdapter = null;
Log.i("Activity", "Adapter nulled!");
}
Log.i("Activity", "Activityhas been destroyed");
}
public ArrayAdapter<String> getArrayAdapter(ArrayList<String> personList)
{
arrayAdapter = new ArrayAdapter<String>
(getBaseContext(), android.R.layout.simple_list_item_1, personList);
Log.i("Activity", "Adapter Created");
return arrayAdapter;
}
在我的片段中使用此代码
if (personList == null)
{
personList = new ArrayList<String>();
}
if (arrayAdapter == null)
{
arrayAdapter = ((ActivityMainScreen)getActivity()).getArrayAdapter(personList);
}