Прежде всего, отслеживайте все «активные» фрагменты. В этом случае вы отслеживаете страницы фрагментов в FragmentStatePagerAdapter, которые используются ViewPager.
@Override
public Fragment getItem(int index) {
Fragment myFragment = MyFragment.newInstance();
mPageReferenceMap.put(index, myFragment);
return myFragment;
}
Чтобы избежать ссылки на «неактивные» фрагментные страницы, вам необходимо реализовать FragmentStatePagerAdapter destroyItem (...):
@Override
public void destroyItem (ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
mPageReferenceMap.remove(position);
}
, и когда вам нужно получить доступ к отображаемой в данный момент странице, вы вызываете:
int index = mViewPager.getCurrentItem();
MyAdapter adapter = ((MyAdapter)mViewPager.getAdapter());
MyFragment fragment = adapter.getFragment(index);
Где getFragment (int) MyAdapter метод выглядит следующим образом:
public MyFragment getFragment(int key) {
return mPageReferenceMap.get(key);
}
Надеюсь, это поможет!
В конце мы использовали контекст Thread в Log4J. Вероятно, это не лучшее решение, поскольку мы смешиваем цель одного и того же, но вот как мы это сделали:
Идентификатор процесса извлекается так: org.apache.logging.log4j.ThreadContext.get("RequestId");
И инициировано в Handler Chain (зависит от того, какую службу вы используете): ThreadContext.put("RequestId", Objects.toString(job.getId(), (String)null));
Это происходит на каждой полученной работе.
Отказ от ответственности: Это решение еще не было полностью протестировано, но это направление, в котором мы идем