Изменить два байта в GUID

Чтобы оживить переход между фрагментами или оживить процесс показа или скрыть фрагмент, вы используете Fragment Manager для создания Fragment Transaction.

. В каждой транзакции фрагмента вы можете указать и которые будут использоваться для показа и скрытия соответственно (или оба, когда используется замена).

Следующий код показывает, как вы заменили бы фрагмент, скользя один фрагмент и скользящий другой в своем месте.

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);

DetailsFragment newFragment = DetailsFragment.newInstance();

ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");

// Start the animated transition.
ft.commit();

Чтобы добиться того же самого, скрывая или отображая фрагмент, который вы просто назовете ft.show или ft.hide, передав фрагмент, который вы хотите показать или скрыть соответственно.

Для справки определения XML-анимации будут использовать тег objectAnimator. Пример slide_in_left может выглядеть примерно так:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>
2
задан Carmen Berndt 18 March 2019 в 15:25
поделиться

1 ответ

В GUID есть компонент, основанный на времени, который вы можете изменить, и если вы понимаете последствия, это не приведет к коллизии. О некоторых мыслях вы можете прочитать здесь:

https://blog.stephencleary.com/2010/11/few-words-on-guids.html

соответствующий раздел гласит:

GUID на основе времени (версия 1) GUID на основе времени - это вариант 2, GUID версии 1 RFC 4122, также известный как «последовательные GUID», потому что они могут генерироваться со значениями, очень близко друг к другу. Они состоят из трех полей в дополнение к варианту и версии: 60-битная метка времени UTC, 14-битная тактовая последовательность и 48-битный идентификатор узла.

Идентификатором узла обычно является MAC-адрес компьютера, генерирующего основанный на времени GUID (который гарантированно будет уникальным, поскольку MAC-адреса используют систему регистрации). Однако это также может быть 47-битное случайное значение (с установленным широковещательным битом). В этом случае нет опасности столкновения с реальными MAC-адресами, поскольку широковещательный бит физического MAC-адреса всегда равен 0. Однако существует опасность столкновения с другими случайными идентификаторами узлов; в частности, вероятность столкновения составляет 50%, если в сеть войдут 13,97 миллиона случайных узлов.

Примечание. Использование случайного значения вместо MAC-адреса в настоящее время не поддерживается Microsoft Win32 API. Это означает, что любая генерация GUID, выполненная с использованием UuidCreateSequential, будет выставлять MAC-адрес.

Поле «Последовательность часов» инициализируется случайным значением и увеличивается всякий раз, когда системные часы перемещаются назад после последнего сгенерированного GUID (например, если компьютер корректирует свое время с помощью сервера времени или если он потерял свою дату и считает, что это 1980). Это позволяет сбросить 16 384 часов без какой-либо опасности столкновения. Если GUID генерируются так быстро, что системные часы не сдвинулись вперед со времени последней метки времени GUID, тогда алгоритм генерации GUID обычно останавливается до тех пор, пока системные часы не увеличат метку времени.

Последовательные GUID на самом деле не являются последовательными. В обычных условиях идентификаторы GUID, генерируемые одним и тем же компьютером, будут постепенно увеличивать поля меток времени (при этом остальные поля будут оставаться постоянными). Однако поле Timestamp не находится в младших значащих битовых позициях GUID, поэтому, если GUID обрабатывается как 128-битное число, он фактически не увеличивается.

Важно отметить, что вероятность коллизий последовательных идентификаторов GUID чрезвычайно мала. Последовательность часов и метка времени почти наверняка уникально идентифицируют момент времени, а идентификатор узла почти наверняка идентифицирует уникальный источник.

Последовательные GUID могут быть созданы с помощью функции Win32 UuidCreateSequential или с помощью uuidgen.exe из Windows SDK, передав параметр -x.

Вы также можете просмотреть соответствующую спецификацию здесь:

https://tools.ietf.org/html/rfc4122#section-4.1.1

0
ответ дан jwh20 18 March 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: