2013-11-29 3 views
1

Я пытаюсь освободить размер кучи, уничтожив текущую активность, перейдя к другому действию.Активность, не разрушающая выделение кучи в андроиде?

Я использую finish(); на backPreess()

Но это не отпуская кучу.

on setContentView() 

Размер кучи увеличивается на 16 МБ. Я хочу выпустить это увеличение кучи после перехода на другую деятельность. Может ли кто-нибудь помочь, как это сделать?

Мой код выглядит следующим образом:

package com.stancil.levels;   
    public class PaintActivity extends ZebraActivity implements 
      PaintView.LifecycleListener, PaintView1.LifecycleListener1 { 

     private static final int REQUEST_PICK_COLOR = 1; 

     .... 
.... 
    public PaintActivity() { 
      _state = new State(); 
     } 

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

      Constants.context = getApplicationContext(); 


      setContentView(R.layout.paint); 
      .................. 
    ................... 
    ............... 

     } 


     public void onPreparedToLoad() { 
      // We need to invoke InitPaintView in a callback otherwise 
      // the visibility changes do not seem to be effective. 
      new Handler() { 
       @Override 
       public void handleMessage(Message m) { 
         new InitPaintView(); 

        Log.v("PaintActivity", "After InitPaintView Called"); 
       } 
      }.sendEmptyMessage(0); 
     } 


     private class InitPaintView implements Runnable { 
      private Bitmap _originalOutlineBitmap; 
      private Handler _handler; 

      public InitPaintView() { 
       // Make the progress bar visible and hide the view 

       _paintView.setVisibility(View.GONE); 
       _progressBar.setProgress(0); 
       _progressBar.setVisibility(View.VISIBLE); 
       _state._savedImageUri = null; 
       _state._loadInProgress = true; 

       _originalOutlineBitmap=_imageBitmap; 
       _handler = new Handler() { 
        @Override 
        public void handleMessage(Message m) { 
         switch (m.what) { 
         case Progress.MESSAGE_INCREMENT_PROGRESS: 
          // Update progress bar. 
          _progressBar.incrementProgressBy(m.arg1); 
          break; 
         case Progress.MESSAGE_DONE_OK: 
         case Progress.MESSAGE_DONE_ERROR: 
          // We are done, hide the progress bar 
          // the paint view back on. 
          _state._loadInProgress = false; 
          _paintView.setVisibility(View.VISIBLE); 
          _progressBar.setVisibility(View.GONE); 
          initiatePopupWindow(); 
          break; 
         } 
        } 
       }; 

       new Thread(this).start(); 

      } 

      public void run() { 
       Log.v("Wasimmmmmmmmmmmmmmmm", "qqqqq 22"); 
       _paintView.loadFromBitmap(_originalOutlineBitmap, _handler); 
      } 

     } 



     private static class State { 
      // Are we just loading a new outline? 
      public boolean _loadInProgress; 

      // The resource ID of the outline we are coloring. 
      //public int _loadedResourceId; 
      // 
      // If we have already saved a copy of the image, we store the URI here 
      // so that we can delete the previous version when saved again. 
      public Uri _savedImageUri; 
     } 







     @Override 
      public void onBackPressed() { 
       new AlertDialog.Builder(this) 
       .setTitle("Exit") 
       .setMessage("Do you want to go to Main Menu?") 
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 

         Constants.check_new=true; 
         Intent i=new Intent(PaintActivity.this,MainActivity.class); 
         // i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(i); 
         finish(); 
         overridePendingTransition(R.anim.fade_in, R.anim.fade_out); 

        } 
       }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         // Do nothing. 
        } 
       }).show(); 
     } 
} 

    } 
+1

в следующий раз, пожалуйста, попробуйте написать на английском языке. «Это» написано, например, s not z. Удачи! –

ответ

1

выпуск Yoru объектов в методе OnDestroy, в любом случае, если нет ссылки на detroyed деятельности, GC будет автоматически очищать всякий раз, когда его необходимо (оно не должно произойти сразу после того, как вы закрыли свою деятельность). В качестве альтернативы, это метод принудительного запуска GC, но я даже не напишу об этом, потому что его не действительно особенность, типичное приложение должно использовать

+0

Я использую Log.v («onPainiActivyt», «onDestrou»); ... byt этот журнал не отображается в журнале Cat при переходе к другому действию. Я использую функцию finish(), но Log не выполняется – Shigri

+0

onDestroy () вызывается только ОС, когда она мала на ресурсах, и, если она, наконец, избавляет вашу деятельность от свободной памяти. Это поможет вам понять концепцию: stackoverflow.com/questions/4449955/activity-ondestroy-never-called –

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