У меня есть простое приложение с двумя действиями: MainActivity (с двумя фрагментами) и GameActivity. В одном из фрагментов FragmentHome у меня есть FloatingButton, который при нажатии запускает мою GameActivity. Когда игра заканчивается, я показываю AlertDialog с кнопкой, которая при нажатии делает: GameActivity.this.onBackPressed();
что возвращает пользователя обратно в FragmentHome, где он может снова запустить игру.
Проблемный сценарий: пользователь запускает игру (из плавающей кнопки FragmentHome), играет в нее, игра заканчивается через несколько секунд, и пользователь направляется обратно в FragmentHome, где он снова запускает игру; если повторить это 7-8 раз, то в какой-то момент щелчок FloatingButton просто завершит приложение без ошибки logcat. Единственная странная «подсказка» в logcat, которую я вижу, это D/StrictMode: нарушение политики StrictMode: android.os.strictmode.DiskReadViolation, которая на самом деле мало что говорит о завершении работы приложения.
Я следил за использованием памяти приложения (с самого устройства Android): это нормально, от 53 МБ до 66 МБ.
Моя плавающая кнопка при нажатии:
myView.findViewById(R.id.btnStartGame).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!AppController.appOnline) {
Snackbar.make(lstLuckyUsers, getString(R.string.txt_no_internet), 2000).show();
return;
}
Intent gameIntent = new Intent(FragmentHome.this.context, GameActivity.class);
FragmentHome.this.context.startActivity(gameIntent);
}
});
Нажмите кнопку My GameActivity AlertDialog:
MaterialButton btnOK = dialogView.findViewById(R.id.btnOK);
if (btnOK != null)
btnOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// close dialog and game Activity
gameOverDialog.dismiss();
GameActivity.this.onBackPressed();
}
});
Не подскажете, где искать проблему? Такое ощущение, что сборщик мусора не выполняет свою работу должным образом, или есть фреймворк, который я использую, и это приносит проблемы. Зависимости стандартные:
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.mygame.mygame"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.navigation:navigation-fragment:2.3.3'
implementation 'androidx.navigation:navigation-ui:2.3.3'
// volley lib
implementation 'com.android.volley:volley:1.1.1'
// FAN Ad
implementation 'com.facebook.android:audience-network-sdk:6.0.0'
// Google In-App Review
implementation 'com.google.android.play:core:1.9.1'
}