片段内存管理

时间:2013-03-20 07:33:23

标签: android memory-management fragment

我将列表视图放在项目点击监听器代码上供您参考。在列表视图中每个项目单击我用另一个片段替换片段。我将主片段(片段1)放在帧布局文件中。我只是在同一视图中切换片段。

 listView.setOnItemClickListener(new OnItemClickListener() {
                   @Override
                   public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {

                  if(array[position].equalsIgnoreCase("movies")){
                       FragmentTransaction transaction = getFragmentManager().beginTransaction();
                       transaction.replace(R.id.fragment1, new next());

                       transaction.commit();
                  }
                  if(array[position].equalsIgnoreCase("serials")){
                       FragmentTransaction transaction = getFragmentManager().beginTransaction();
                   transaction.replace(R.id.fragment1, new Item2());

                       transaction.commit();
                 }  
                  if(array[position].equalsIgnoreCase("restaurents")){
                       FragmentTransaction transaction = getFragmentManager().beginTransaction();
                   transaction.replace(R.id.fragment1, new Item3());

                       transaction.commit();
                 }     
                   } 
                });

如果我点击电影,则类似地将fragment1替换为新片段(第1项)  如果我点击连续剧,则片段1被新片段替换(第2项)  我想当我切换到新片段(第1项)时片段1内存将被释放,当我点击片段(第2项)时片段(第1项)将被释放,告诉我它将在同一个工作方式与否。因为我需要为每个列表项单击使用更多数量的片段(列表中的项目数将更多)。我想知道它是否会以相同的方式发生是否有任何方法来管理片段的内存。建议我一个更好的方法来做这个,因为我希望我的应用程序运行没有内存泄漏。

1 个答案:

答案 0 :(得分:0)

您可以使用片段生命周期方法对此进行简单检查。

public void onStart() {
    super.onStart();
    Log.d(LOG_TAG, "Fragment1 onStart");
  }

  public void onResume() {
    super.onResume();
    Log.d(LOG_TAG, "Fragment1 onResume");
  }

  public void onPause() {
    super.onPause();
    Log.d(LOG_TAG, "Fragment1 onPause");
  }

  public void onStop() {
    super.onStop();
    Log.d(LOG_TAG, "Fragment1 onStop");
  }

  public void onDestroyView() {
    super.onDestroyView();
    Log.d(LOG_TAG, "Fragment1 onDestroyView");
  }

  public void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG, "Fragment1 onDestroy");
  }

  public void onDetach() {
    super.onDetach();
    Log.d(LOG_TAG, "Fragment1 onDetach");
  }