Вопрос

Привет всем, спасибо, что просмотрели это. Я действительно не могу понять, почему это случилось, хотя это может иметь какое -то отношение к моей фоновой потоке, которая обрабатывает аудиоинатум. Все работает нормально до тех пор, пока я не наклонился по телефону, еще не поместил ландшафтный портрет или тому подобное. Так что он должен автоматически просто растянуть мою картину портрета. Но он просто растягивает его, также сбрасывает мою этикетку и делает меня неспособным использовать свои функции SetText. Я также заметил, что это приостанавливает мою фоновую нить. Вот код для установки TextViews:

private void reactOnAudioMessage(Message msg) {
    TextView txtVwLastValue = (TextView) findViewById(R.id.txtVwLastValue);
    String result=null;
    DataFile newData=null;
    Bundle bndl=msg.getData();
    // ** newData getting created, with the correcy value etc this is not the problem.
    if(newData!=null){
        txtVwLastValue.setText("Last Value Received:" +newData.getValue());
        mDataList.add(newData);
        drawGraph(mImageView);
    } 
}

Вот мой XML -файл

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Record"
android:id="@+id/btnRecord">
</Button>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Last Value Received:" android:id="@+id/txtVwLastValue"></TextView>
<TextView android:text="TextView" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/txtVwType"></TextView>
<ImageView android:src="@drawable/icon" android:layout_width="fill_parent" android:id="@+id/imgViewGraph" android:layout_height="300px"></ImageView>
</LinearLayout>
Это было полезно?

Решение

So it should automatic just stretch my portrait layout.

Это не совсем так, как вы также видели. Ожидаемое поведение для изменения ориентации - воссоздать деятельность (что означает прохождение всего жизненного цикла активности, Ondestroy (), Oncreate () и т. Д. - Очевидно, причина, по которой ваш этикетка сбрасывается). Это можно обрабатывать по -разному:

http://developer.android.com/guide/topics/resources/runtime-changes.html & http://developer.android.com/resources/articles/faster-creen-onientation-change.html

Я «обрабатываю» ориентацию изменяется 2 довольно простыми способами в моем приложении. Одно занятие заблокировано на портрет (так как не имеет смысла просматривать его в ландшафте), установив флаг экранизации в манифесте:

<activity android:name=".SettingsActivity" android:screenOrientation="portrait">

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

Вам нужно подумать о том, как вы хотите справиться с изменением ориентации. Что имеет смысл в вашем приложении? В Google много хороших ресурсов, которые говорят об изменениях ориентации.

Я полагаю, что проблема, с которой вы испытываете с фоновым потоком, связаны с хэндлерами, которые у вас есть в деятельности, которая разрушена и переделана.

Другие советы

Когда устройство повернуто, оно эффективно разрушает и воссоздает вашу активность в новой ориентации. Если вы начинаете свою ветку в рамках своей деятельности, это объяснит некоторое поведение, которое вы видите. Если вы хотите, чтобы ваш поток выжил между двумя экземплярами активности, вам нужно будет реализовать его как сервис, а не простой поток.

Способ доказать, что это установить точку останова или добавить некоторую журнал в вашем методе CREATE, и вы увидите, что это нажимает как при запуске приложения, и активность сначала отображается, так и на повороте устройства.

Каждый раз, когда вы наклоняете свой телефон, то есть каждый раз, когда вы меняете между портретным режимом и режим ландшафта, активность перезапускается, поэтому onCreate() выполнено.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top