2013-04-06 2 views
0

У меня есть одно основное видение. Он запускает другие вспомогательные операции в виде вкладки. При закрытии вспомогательных операций память не освобождается, используя суб-вкладку. При открытии других вкладок память увеличивается каждый раз.Память не освобождается, когда действие закрыто.

Через некоторое время мое приложение получить разбился:

public class Main extends Activity { 

public static Activity activity; 

private Bundle saveInstance; 





@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    this.activity = this; 

    this.saveInstance = savedInstanceState; 

    Application app = Application.getSharedInstance(); 

    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.activity_main, menu); 

    return true; 
} 

@Override 
public void onBackPressed() 
{ 
    // super.onBackPressed(); 
    AlertUtills.showQuitDialog(Main.this); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 

    final TabHost tabHost = (TabHost) this 
      .findViewById(android.R.id.tabhost); 

    LocalActivityManager mLocalActivityManager = new LocalActivityManager(
      this, false); 
    mLocalActivityManager.dispatchCreate(saveInstance); 
    tabHost.setup(mLocalActivityManager); 

    switch (item.getItemId()) 
    { 

    case R.id.create_new: 
    { 
     if (CommonUtilities.isTabNotExist(tabHost, "NewProject")) 
     { 
      TabSpec spec2 = tabHost.newTabSpec("NewProject"); 

      Intent in = new Intent(this, Activity_cretateNew.class); 
      in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      spec2.setContent(in); 
      spec2.setIndicator("New Project"); 
      tabHost.addTab(spec2); 
      tabHost.setCurrentTabByTag("NewProject"); 
     } 

     tabHost.setCurrentTabByTag("NewProject"); 

    } 
     break; 

    case R.id.open: 
    { 

     OpenDialog dialog = new OpenDialog(this, "Open Project", false, 
       OpenDialogType.CORELOG_OPEN); 
     dialog.Show(); 
    } 
     break; 

    case R.id.menu_exit: 

     onBackPressed(); 

     break; 

    case R.id.import_las: 
    { 
     if (isCurrentProjectExist()) 
     { 
      if (CommonUtilities.isTabNotExist(tabHost, "ImportLas")) 
      { 
       TabSpec spec2 = tabHost.newTabSpec("ImportLas"); 
       Intent in = new Intent(this, LASImportWizard.class); 
       spec2.setContent(in); 
       spec2.setIndicator("Import Las"); 
       tabHost.addTab(spec2); 
      } 

      tabHost.setCurrentTabByTag("ImportLas"); 

     } 
    } 
     break; 

    case R.id.import_coredata: 
    { 
     if (isCurrentProjectExist()) 
     { 
      if (CommonUtilities.isTabNotExist(tabHost, "coredata")) 
      { 
       TabSpec spec2 = tabHost.newTabSpec("coredata"); 
       Intent in = new Intent(Main.this, 
         CoreDataImportWizard.class); 
       spec2.setContent(in); 
       spec2.setIndicator("Core Data Import"); 
       tabHost.addTab(spec2); 
      } 

      tabHost.setCurrentTabByTag("coredata"); 

     } 
    } 
     break; 

    case R.id.list_Data: 
    { 
     if (isProjectHasWell()) 
     { 
      if (CommonUtilities.isTabNotExist(tabHost, "ListData")) 
      { 
       TabSpec spec1 = tabHost.newTabSpec("ListData"); 
       Intent in = new Intent(Main.this, ListDataWindow.class); 
       // in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       spec1.setContent(in); 
       spec1.setIndicator("List Data"); 
       tabHost.addTab(spec1); 

      } 

      tabHost.setCurrentTabByTag("ListData"); 

     } 
    } 
     break; 


    case R.id.basemap: 
    { 
     if (isCurrentProjectExist()) 
     { 
      if (CommonUtilities.isTabNotExist(tabHost, "BaseMap")) 
      { 
       TabSpec spec2 = tabHost.newTabSpec("BaseMap"); 
       Intent inBasemap = new Intent(Main.this, Basemap.class); 
       spec2.setContent(inBasemap); 
       spec2.setIndicator("Base Map"); 
       tabHost.addTab(spec2); 

      } 

      tabHost.setCurrentTabByTag("BaseMap"); 
     } 
    } 
     break; 

    case R.id.logPlot: 
    { 
     if (isProjectHasWell()) 
     { 
      if (CommonUtilities.isTabNotExist(tabHost, "LogPlot")) 
      { 
       TabSpec spec2 = tabHost.newTabSpec("LogPlot"); 
       Intent intentLogPlot = new Intent(Main.this, 
         Logplot_Activity.class); 
       spec2.setContent(intentLogPlot); 
       spec2.setIndicator("Log Plot"); 
       tabHost.addTab(spec2); 
      } 
      tabHost.setCurrentTabByTag("LogPlot"); 
     } 
    } 
     break; 

    case R.id.show_hide_project_explorer: 
    { 
     FrameLayout frameLayout = (FrameLayout) activity 
       .findViewById(R.id.explorerFrame); 

     if (item.isChecked() == true) 
     { 
      item.setChecked(false); 
      frameLayout.setVisibility(View.GONE); 
     } 
     else 
     { 
      item.setChecked(true); 
      frameLayout.setVisibility(View.VISIBLE); 
     } 

     break; 
    } 

    } 


    return true; 
} 

private boolean isCurrentProjectExist() 
{ 
    return Application.getSharedInstance().getCurrentProject() == null ? false 
      : true; 
} 

private boolean isProjectHasWell() 
{ 
    return isCurrentProjectExist() 
      && Application.getSharedInstance().getCurrentProject() 
        .getAllWells().length != 0 ? true : false; 

} 



public static Activity getMainActivity() 
{ 
    return activity; 
} 
} 
+1

Хостинг в таблицах устарел более двух лет. – CommonsWare

+0

скажите, пожалуйста, другой способ создания вкладки tab.Creating - это наше требование. – ravi

+0

Используйте фрагменты с вкладками панели действий. Или используйте фрагменты с 'ViewPager' и' PagerTabStrip'. Или используйте 'FragmentTabHost'. Или используйте регулярные представления в регулярной 'TabHost' (вместо действий). – CommonsWare

ответ

1

Run HPROF или другой аналогичный профайлер. Если это произойдет, количество объектов вашей активности вкладки будет увеличиваться. Посмотрите, что держится за ссылки на них, а затем исправьте их, чтобы они этого не сделали.

Его тип трудно отлаживать такие вещи без этих hprofs.

+0

Я использую MAT, но это не полезно для меня. Он показывает много ресурсов, Bitmap, который не создан мной. – ravi

+0

Это ресурсы в папке res/drawable. Некоторые из вас, некоторые из системного ресурса (встроенные значки). Android предварительно загружает их для скорости. Не беспокойтесь о них, только беспокоитесь о растровых изображениях, которые вы создали. –

+0

Я не создаю растровое изображение, я обрабатываю только файлы * .txt, а при обработке я использовал java.io.FileInputStream для чтения filse & fill данных в нашем объекте и сохранения их как объекта с помощью java.io.ObjectOutputStream & set null все объекты. Для каждой обработки файлов есть 8-10 МБ. Увеличение объема оперативной памяти приложения и после 5 до 8 импорта мое приложение разбивается. – ravi

Смежные вопросы