Гибкое обновление в приложении установлено, когда приложение находится в фоновом режиме
Я использую новую функцию Android Play Core Library In-App Updates
, Итак, в документации сказано, что для гибкого обновления в приложении мне нужно InstallStateUpdatedListener
который прослушивает, когда обновление загружается в фоновом режиме, а затем нам нужно показать пользовательский интерфейс или, в моем случае, снэк-бар пользователю, описывая, что пользователю теперь нужно установить уже загруженное обновление. Это прекрасно работает, когда я нахожусь на переднем плане все время, но когда я перехожу на фон перед загрузкой обновления в приложении и через некоторое время возвращаюсь на передний план приложения, мое приложение автоматически обновляется, не показывая любой пользовательский интерфейс с просьбой установить обновление. Это не должно происходить в идеале в соответствии с документами.
Я пытался удалить все виды слушателей, комментируя код, который завершает обновление, но безрезультатно.
appUpdateManager = AppUpdateManagerFactory.create(getAppContext());
if (appUpdateInfo.updateAvailability() != UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
final InstallStateUpdatedListener listener =
new InstallStateUpdatedListener() {
@Override
public void onStateUpdate(InstallState installState) {
if (installState.installStatus() ==
InstallStatus.DOWNLOADED) {
showUpdateCompletedSnackbar();
}
}
};
appUpdateManager.registerListener(listener);
try {
Log.d("BaseApp","Starting Flexible in app update");
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.FLEXIBLE,
getActivity(),
2000);
} catch (IntentSender.SendIntentException exception) {
Log.e("BaseApp",exception);
}
}
private static void showUpdateCompletedSnackbar() {
Snackbar snackbar =
Snackbar.make(getContainer(),
appContext.getString(R.string.in_app_update_snackbar_text),
Snackbar.LENGTH_INDEFINITE);
snackbar.setAction("INSTALL", new View.OnClickListener() {
@Override
public void onClick(View v) {
appUpdateManager.completeUpdate();
}
});
snackbar.setActionTextColor(
ContextCompat.getColor(getAppContext(), R.color.blue));
snackbar.show();
}
1 ответ
Итак, на самом деле документация не совсем ясна по этому поводу, но есть одно предостережение в обновлении Flexible In-app: если вы начнете загружать обновление из приложения и продолжите использовать приложение, обновление будет загружаться в фоновом режиме и затем уведомит пользователя через пользовательский интерфейс о том, что обновление было загружено, и нам нужно установить обновление (этот показ пользовательского интерфейса и все будет обрабатываться разработчиком).
Но второй случай, из-за которого у меня возникла проблема, заключался в том, что если перед загрузкой обновления я перенесу свое приложение в фоновый режим. В этом случае, если обновление загружается, когда приложение находится в фоновом режиме, оно также установит обновление, не сообщая пользователю о новой версии, а затем, когда вы перенесете свое приложение на передний план, вы увидите обновленное приложение. вместо любого пользовательского интерфейса.
Гибкое обновление предназначалось только для этого: если пользователь использует приложение, обновление будет загружаться в фоновом режиме, при этом у пользователя не будет проблем с закрытием приложения и его обновлением, оставляя работу, которую они выполняли в приложении, и затем, после загрузки обновления, у пользователя будет возможность окончательно установить обновление, используя отображаемый им пользовательский интерфейс, когда они захотят или когда они завершат свою текущую работу в приложении.
В приложении больше предостережений, и эта средняя статья будет полезна для вас, чтобы увидеть больше крайних случаев https://proandroiddev.com/android-in-app-updates-common-pitfalls-and-some-good-patterns-9024988bbbe8