1

これを見てくれてありがとう。オーディオ入力を処理しているバックグラウンドスレッドと関係があるかもしれませんが、なぜこれが発生するのか本当に理解できません。電話を傾けるまではすべて正常に機能しますが、横向きのポートレートなどはまだ入れていません。したがって、ポートレートのレイアウトを自動的に拡大する必要があります。しかし、それは単にそれを引き伸ばすだけであり、それはまた私のラベルをリセットし、そしてそれらで私の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>
4

3 に答える 3

2
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-screen-orientation-change.html _ _

私は、アプリケーションで2つのかなり単純な方法で方向の変更を「処理」します。マニフェストでscreenOrientationフラグを設定することにより、1つのアクティビティが縦向きにロックされます(横向きで表示しても意味がないため)。

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

私が使用する2番目のアクティビティは、横向きで表示したときに最もよく見えるグラフが含まれているため、両方の方法で表示する必要があります。これは基本的に、アクティビティが正常に終了し(使用するスレッドまたはハンドラーを含む)、画面全体に横向きでグラフを描画するように再作成されることを意味します。

向きの変更をどのように処理したいかを考える必要があります。アプリケーションで最も意味のあることは何ですか?グーグルを通して方向の変化について話している周りにたくさんの良いリソースがあります。

バックグラウンドスレッドで発生している問題は、アクティビティで発生したハンドラーが破棄されて再作成されたことが原因だと思います。

于 2011-04-28T08:19:58.503 に答える
2

デバイスを回転させると、アクティビティが効果的に破棄され、新しい方向で再作成されます。アクティビティの一部としてスレッドを開始する場合、それはあなたが見ている振る舞いのいくつかを説明するでしょう。スレッドを2つのアクティビティインスタンス間で存続させたい場合は、単純なスレッドではなく、サービスとして実装する必要があります。

これを証明する方法は、ブレークポイントを設定するか、onCreateメソッドにログを追加することです。これは、アプリの起動時とアクティビティが最初に表示されたとき、およびデバイスのローテーションの両方でヒットすることがわかります。

于 2011-04-28T08:24:00.620 に答える
0

スマートフォンを傾けるたびに、つまりポートレートモードとランドスケープモードを切り替えるたびに、アクティビティが再開されるため、onCreate()実行されます。

于 2011-04-28T09:02:11.957 に答える