1
私のAndroidアプリがアイドル状態になっている(何もしていない)とき。割り振られたメモリは、 "Free"メモリがなくなるまでゆっくりと増加し、天井に当たると、メモリはガベージコレクションされると思います。これは通常のメモリ動作ですか?
下の画像をご覧ください。
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
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インスタンス。
あなたのアプリは何をしていますか?これは、すべての描画パスでメモリをリークしているカスタムビュー、または作成したループ内に新しいオブジェクトを作成することができます。 – roarster