Android Как настроить макет в полноэкранном режиме, когда видна программируемая доска

Я много исследовал, чтобы настроить макет, когда softkeyboard активен, и я успешно реализовал его, но проблема возникает, когда я использую android: theme = «@ android: style/Theme.NoStartBar.Fullscreen» это в моей деятельности тэг в файле манифеста.

Для этого я использовал android: windowSoftInputMode = «adjustPan 'adjustResize' stateHidden» с различными опциями, но без удачи.

После этого я реализовал FireScreen программно и попробовал различные макеты для работы с FureScreen , но все это напрасно.

Я сослался на эти ссылки и посмотрел здесь много сообщений, связанных с этой проблемой:

http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html

http://davidwparker.com/2011/08/30/android-how-to-float-a-row-above-keyboard/

Вот xml-код:




    

        

            

            

            

            

        
    

    

        

enter image description here

Я хочу, чтобы нижние 2 кнопки должны идти вверх, когда мягкая клавиатура будет изображена.

enter image description here

-121--587456-

Почему аннотации в Android являются такой проблемой производительности (медленной)? Я являюсь ведущим автором ORMLite, который использует аннотации Java на классах для построения схем баз данных. Большой проблемой производительности стартапа для нашего пакета оказывается вызов методов аннотации...

Я являюсь ведущим автором ORMLite , который использует аннотации Java на классах для построения схем базы данных. Большой проблемой производительности стартапа для нашего пакета оказывается вызов методов аннотации под Android 1.6. Я вижу такое же поведение вплоть до 3.0.

Мы видим, что следующий простой код аннотации является невероятно интенсивным GC и реальной проблемой производительности. 1000 вызовов метода аннотации занимает почти секунду на быстром Android-устройстве. Тот же код, что и на моем Macbook Pro, может сделать 28 миллионов (sic) вызовов одновременно. У нас есть аннотация, которая содержит 25 методов, и мы хотели бы сделать более 50 из них в секунду.

Кто-нибудь знает, почему это происходит и есть ли вокруг какая-либо работа? Конечно, есть вещи, которые ORMLite может сделать с точки зрения кэширования этой информации, но есть ли что-то, что мы можем сделать, чтобы «исправить» аннотации под Android? Спасибо.

public void testAndroidAnnotations() throws Exception {
    Field field = Foo.class.getDeclaredField("field");
    MyAnnotation myAnnotation = field.getAnnotation(MyAnnotation.class);
    long before = System.currentTimeMillis();
    for (int i = 0; i < 1000; i++)
        myAnnotation.foo();
    Log.i("test", "in " + (System.currentTimeMillis() - before) + "ms");
}
@Target(FIELD) @Retention(RUNTIME)
private static @interface MyAnnotation {
    String foo();
}
private static class Foo {
    @MyAnnotation(foo = "bar")
    String field;
}

Это приводит к следующим выводам журнала:

I/TestRunner(  895): started: testAndroidAnnotations
D/dalvikvm(  895): GC freed 6567 objects / 476320 bytes in 85ms
D/dalvikvm(  895): GC freed 8951 objects / 599944 bytes in 71ms
D/dalvikvm(  895): GC freed 7721 objects / 524576 bytes in 68ms
D/dalvikvm(  895): GC freed 7709 objects / 523448 bytes in 73ms
I/test    (  895): in 854ms

EDIT:

После того, как @ candrews указал меня в правильном направлении, я сделал некоторые тычки вокруг кода. Проблема с производительностью может быть вызвана ужасным общим кодом в Method.equals () . Он вызывает toString () обоих методов, а затем сравнивает их. Каждый toString () использует StringBuilder с набором методов добавления без хорошего размера инициализации. Выполняется .равно при сравнении полей будет значительно быстрее.

ПРАВКА:

Мне было дано интересное улучшение производительности рефлексии. Теперь мы используем отражение, чтобы заглянуть в класс AnnotationFactory для непосредственного чтения списка полей. Это делает класс отражения 20 в для нас быстрее, поскольку он обходит вызов, который использует метод method.equals () . Это не универсальное решение, а код Java из репозитория ORMLite SVN . Общее решение см. в ответе янченко ниже .

50
задан Community 23 May 2017 в 02:09
поделиться