0
我正在寫一個android項目,我寫這些代碼,我想知道我的代碼是否會導致一些內存泄漏。你會看到我在FoldActivity中設置了「OnItemSelectedListener」,然後我在FoldFragment中實現了「ItemSelectedListener」,所以這個片段總是監聽這個監聽器,我擔心當一個片段被替換時,片段是否可以通過檢索GC?這種情況會導致內存泄漏嗎?
我覺得片段總是有一個來自foldActivity的引用,這會導致gc永遠無法檢索它,即使它已經被其他片段所取代。
public class FolderActivity extends Activity {
// ...
Spinner spinner;
protected void onCreate(Bundle savedInstanceState) {
// ...
final View spinnerView = inflater.inflater(R.layout.category_spinner, null);
spinner = spinnerView.findViewById(R.id.categorySpinner);
// ...
}
protected void onPostCreate(Bundle savedInstanceState) {
// ...
if (getFragmentManager.findFragmentById(R.id.fragment) == null) {
Fragment folderFragment = new folderFragment();
if (getIntent().hasExtra(EXTRA_DIR)) {
Bundle args = new Bundle();
args.putString(FolderFragment.EXTRA_DIR, getIntent().getStringExtra(EXTRA_DIR));
folderFragment.setArguments(args);
}
}
showFragment(folderFragment);
}
public void showFragment(Fragment fragment) {
spinner.setOnItemSelectedListener((folderFragment)fragment);
getFragmentManager()
.beginTransaction()
.addToBackStack(null)
.replace(R.id.fragment, fragment)
.commit();
}
}
public class FoldFragment extends Fragment implements AdapterView.OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(LOG_TAG, "item selected");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.d(LOG_TAG, "nothing selected");
}
}