Поместите фрагмент карты в LinearLayout и дайте этому Linear Layout
android:layout_height="0dp"
android:layout_weight="1"
Вы ищете Святой Грааль, я думаю. AFAIK это не существует, и Java, не является языком, который позволяет такому подходу быть легко созданным.
"Параллелизм Java на практике" имеет раздел по тестированию на проблемы многопоточности. Это привлекает особое внимание к тому, как трудно это должно сделать.
ИДЕЯ IntelliJ имеет много полезных проверок параллелизма. Например, это предупреждает Вас при доступе к тому же объекту и от синхронизируемых и от несинхронизируемых контекстов когда Вы синхронизируетесь на неконечных объектах и т.д.
Когда проблема возникает по потокам в Java, это обычно связывается для заведения в тупик обнаружения, больше, чем просто контроль, какие Потоки получают доступ к синхронизируемому разделу одновременно. Расширение JMX, добавленное к JRE с тех пор 1.5, может помочь Вам обнаружить те мертвые блокировки. На самом деле мы используем JMX в нашем собственном программном обеспечении для автоматического обнаружения, заводит в тупик трассировку, где это было найдено.
Вот пример о том, как использовать его.
А также упоминание @Fernando о заведении в тупик потока, другой проблемой с несколькими потоками являются параллельные модификации и проблемы, которые это может вызвать.
Одна вещь, которую Java делает внутренне, состоит в том, что класс набора проводит подсчет того, сколько раз он был обновлен. И затем итератор проверяет, что значение на каждом .next () против того, чем это было, когда interator был создан, чтобы видеть, был ли набор обновлен, в то время как Вы выполняли итерации. Я думаю, что принцип мог использоваться в более общем плане.
Если можно определить поток небезопасные классы, статический анализ смог говорить Вам, "выходят" ли они когда-нибудь для становления видимыми к нескольким потокам. Обычно, программисты делают это в головах, но очевидно они подвержены ошибкам в этом отношении. Инструмент должен смочь использовать аналогичный подход.
Тем не менее от варианта использования Вы описываете, он походит на что-то столь же простое как запоминание потока, и выполнение утверждений на нем могло бы быть достаточным для Ваших потребностей.
class Foo {
private final Thread owner = Thread.currentThread();
void x() {
assert Thread.currentThread() == owner;
/* Implement method. */
}
}
Ссылка владельца все еще заполняется, даже когда утверждения отключены, таким образом, это не совсем "свободно". Я также не хотел бы создавать помехи многим своим классам с этим шаблоном.
Thread.holdsLock (Объект) метод может также быть полезен для Вас.
Вы могли бы интересоваться подходом Peter Veentjer, занесенный в блог о, который он называет Детектором Параллелизма. Я не полагаю, что он открыто получил это все же, но поскольку он описывает это, основная идея состоит в том, чтобы использовать AOP для оснащения кода, что Вы интересуетесь профилированием и записью, которой поток коснулся который поле. После этого это - вопрос вручную или автоматически парсинг сгенерированных журналов.
Попробуйте ConTest или Covertity
Оба инструмента анализируют код для выяснения, какие части данных могли бы быть совместно использованы потоками, и затем они оснащают код (добавьте дополнительный байт-код к скомпилированным классам) проверять, повреждается ли это, когда два потока пытаются изменить некоторые данные одновременно. Два потока затем выполняются много раз, каждый раз, начинающий их с немного отличающимся смещением времени для получения многих возможных комбинаций схем доступа.
Кроме того, проверьте этот вопрос: Поблочное тестирование многопоточное приложение?
Можно использовать профилировщика Netbeans или JConsole для проверки состояния потоков подробно
Для определенного примера Вы даете, SwingLabs имеет некоторый код помощника для обнаружения нарушений потока события и зависает. https://swinghelper.dev.java.net/
Некоторое время назад я работал с Java JProbe профильные инструменты. Один из их инструментов (threadalyzer?) искал нарушения синхронизации потока. Смотря на их веб-страницу, я не вижу инструмент тем именем или вполне что я помню. Но Вы могли бы хотеть смотреть. http://www.quest.com/jprobe/performance-home.aspx