2016-05-21 5 views
1

私のAndroidアプリがアイドル状態になっている(何もしていない)とき。割り振られたメモリは、 "Free"メモリがなくなるまでゆっくりと増加し、天井に当たると、メモリはガベージコレクションされると思います。これは通常のメモリ動作ですか?

下の画像をご覧ください。

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で" のインスタンスは、 "" バイト(29,27%)を6.777.960を占めます。

  • 問題疑い "" 占有5.293.808(22,86%)バイトロード "java.lang.DexCache"、の2つの

33のインスタンス。

  • 問題疑い "長い[]"、 "占有3.970.432(17,15%)バイト" によってロードの3つの

19のインスタンス。

  • 問題疑い "" 占有2.811.328(12,14%)バイトロード "のjava.lang.Class" の4つの

5.082インスタンス。

+0

あなたのアプリは何をしていますか?これは、すべての描画パスでメモリをリークしているカスタムビュー、または作成したループ内に新しいオブジェクトを作成することができます。 – roarster

答えて

0

いいえ、それは正常ではありません。あなたはいつも新しいオブジェクトを作成しているように思えます。

関連する問題