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

当设备旋转时,它会有效地破坏并在新方向上重新创建您的活动。如果您将线程作为活动的一部分启动,那将解释您所看到的一些行为。如果您希望您的线程在两个活动实例之间存在,那么您需要将其实现为服务而不是简单的线程。

证明这一点的方法是在您的 onCreate 方法中设置断点或添加一些日志记录,您将在应用程序启动和首次显示活动时以及设备旋转时看到这一点。

于 2011-04-28T08:24:00.620 回答
2
So it should automatic just stretch my portrait layout.

正如您所看到的,这并不完全正确。未处理的方向更改的预期行为是重新创建 Activity(这意味着要经历整个 Activity 生命周期、onDestroy()、onCreate() 等等 - 显然是您的标签被重置的原因)。这可以通过多种方式处理:

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

我在我的应用程序中以两种相当简单的方式“处理”方向变化。通过在 Manifest 中设置 screenOrientation 标志,一个活动被锁定为纵向(因为在横向中查看它没有意义):

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

我使用的第二个活动需要以两种方式查看,因为它包含一个在横向查看时看起来最好的图表。这基本上意味着我确保我的 Activity 优雅地关闭(包括我使用的任何线程或处理程序)并重新绘制以横向填充屏幕的图形。

您需要考虑如何处理方向变化。在您的应用程序中什么最有意义?有很多关于通过谷歌改变方向的好资源。

我想你在后台线程上遇到的麻烦是由于你在 Activity 中的处理程序被破坏和重新制作的。

于 2011-04-28T08:19:58.503 回答
0

每次倾斜手机时,即每次在纵向模式和横向模式之间切换时,Activity 都会重新启动,因此onCreate()会执行。

于 2011-04-28T09:02:11.957 回答