我在Java中进行了大量关于静态对象的谷歌搜索,并且我认为我理解了它们在Android中的工作方式。静态对象在应用程序进程终止时被GC收集,而不是在声明静态对象的Activity销毁时(如果我错了,请纠正我)。我有一个使用Fragments的Tabhost应用程序。声明对象的Fragment位于ViewPager的最右侧(共三个Fragments)。右侧选项卡具有显示用户数据的ListView,我希望当用户滑动所有选项卡或导航离开应用程序时,这些数据将保留在内存中,无需保存数据。调整可以得到所需的结果,通过将静态前缀设置为我的Array Adapter。我的问题是,这种做法是否被认为是良好的实践?我知道错误地使用静态对象可能会导致内存问题,然而我没有出现任何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 中编写了此代码(它是父 Tab Fragments 的一个)。我将此代码放在 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;
}
在我的Fragment中使用以下代码:
if (personList == null)
{
personList = new ArrayList<String>();
}
if (arrayAdapter == null)
{
arrayAdapter = ((ActivityMainScreen)getActivity()).getArrayAdapter(personList);
}
static
引用是否可以? - Muhammad Babar