2016-05-21 2 views
1

Когда мое приложение Android работает без дела (т. Е. Ничего не делает). Выделенная память медленно увеличивается до тех пор, пока не будет больше «свободной» памяти, и когда она достигнет потолка, память, как мне кажется, получает сбор мусора.Это обычное поведение памяти?

Пожалуйста, смотрите изображение ниже.

memory over time

MainActivity.class

public class MainActivity extends AppCompatActivity { 

    private final String TAG = "MainActivity"; 

    // FIREBASE 
    private FirebaseAuth firebaseAuth; 
    private FirebaseAuth.AuthStateListener firebaseAuthListener; 

    // FACEBOOK 
    private CallbackManager FBcallbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Initialize Firebase 
     firebaseAuth = FirebaseAuth.getInstance(); 

     // Initialize Facebook Login button 
     FBcallbackManager = CallbackManager.Factory.create(); 
     LoginButton loginButton = (LoginButton) findViewById(R.id.facebookButton); 
     loginButton.setReadPermissions("email", "public_profile"); 

     loginButton.registerCallback(FBcallbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       handleFacebookAccessToken(loginResult.getAccessToken()); 
      } 

      @Override 
      public void onCancel() { 

      } 

      @Override 
      public void onError(FacebookException error) { 

      } 
     }); 

     final Intent intent = new Intent(MainActivity.this, NavigationActivity.class); 

     firebaseAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 

       if (user != null) { 

        Log.d(TAG, user.getDisplayName()); 

        // User is signed in 
        // if so start next activty and close this one 
        Log.d(TAG, "User is logged in"); 

        startActivity(intent); 
        finish(); 
       } else { 
        // User is signed out 
        Log.d(TAG, "User is logged out"); 
       } 

      } 
     }; 


    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     FBcallbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     firebaseAuth.addAuthStateListener(firebaseAuthListener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     if (firebaseAuthListener != null) { 
      firebaseAuth.removeAuthStateListener(firebaseAuthListener); 
     } 



    } 

    private void handleFacebookAccessToken(AccessToken accessToken) { 

     final AuthCredential authCredential = FacebookAuthProvider.getCredential(accessToken.getToken()); 

     firebaseAuth.signInWithCredential(authCredential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 

       if (task.isSuccessful()) { 
        Log.d(TAG, "Authentication successful"); 
       } else { 
        Log.d(TAG, "Authentication not successful"); 
        Log.d(TAG, task.getException().getMessage()); 
       } 

      } 
     }); 
} 
} 

HPROF

hprof

MAT дать мне эти проблемы:

  • Задача Подозреваемые 1

74,846 экземпляров "java.lang.String", загруженные "" занимает 6.777.960 (29,27%) байт.

  • Проблема Подозреваемый 2

33 экземпляров "java.lang.DexCache", загруженные "" занимают 5.293.808 (22,86%) байт.

  • Проблема Подозреваемый 3

19 экземпляров "длинный []", загруженные "" занимают 3.970.432 (17,15%) байт.

  • Проблема Подозреваемых 4

5,082 экземпляров "java.lang.Class", загруженные "" занимает 2.811.328 (12,14%) байт.

+0

Что делает ваше приложение? Это может быть пользовательское представление, которое пропускает память на каждом проходе чертежа, или это может быть создание нового объекта внутри создаваемого вами цикла. – roarster

ответ

0

Нет, это не нормально. Похоже, вы постоянно создаете новые объекты.

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