Когда мое приложение Android работает без дела (т. Е. Ничего не делает). Выделенная память медленно увеличивается до тех пор, пока не будет больше «свободной» памяти, и когда она достигнет потолка, память, как мне кажется, получает сбор мусора.Это обычное поведение памяти?
Пожалуйста, смотрите изображение ниже.
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", загруженные "" занимает 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%) байт.
Что делает ваше приложение? Это может быть пользовательское представление, которое пропускает память на каждом проходе чертежа, или это может быть создание нового объекта внутри создаваемого вами цикла. – roarster