私はJavaの静的オブジェクトで大量のGoogle検索を行ってきましたが、Androidでそれらがどのように機能するかを理解していると思います。静的オブジェクトは、静的オブジェクトを宣言するアクティビティが破棄されたときではなく、アプリのプロセスが終了したときにGCされます(間違っている場合は修正してください)。フラグメントを使用するタブホストを備えたアプリがあります。オブジェクトを宣言するフラグメントは、ViewPagerの右端(3つのフラグメントがあります)にあります。右側のタブには、ユーザーデータを表示する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);
}
編集:
これが私がこのアイデアを実装する方法です。このコードはメインのアクティビティ(タブフラグメントの親となるアクティビティ)にあります。このコードをアクティビティの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);
}