2

私の問題は、次のユーザーの動作で発生します。

  1. アプリケーションを開く
  2. アプリケーションを閉じる (戻るボタンを使用)
  3. 縦から横 (または横から縦) に回転します。
  4. アプリケーションを開く

アプリケーションを 2 回目に開いたときに、onCreate画面の向きが変更されたため、メソッドが 2 回実行されます。

いくつかのテストを行ったところ、Android 3.0 より古いバージョンを実行しているデバイスでのみ問題が発生するようです (すべてのバージョンでテストしたわけではありません)。

Android 4.0 を実行している私のタブレットでは、2 回目の起動時にアプリケーションが正しい初期方向で開かれるため、onCreateメソッドが 1 回だけ呼び出されます。しかし、Android 2.3.5 (HTC Desire HD) を実行しているハンドセットでは、2 回目の起動で前のアクティビティ インスタンスが間違った方向で開かれ、再起動が発生し、メイン アクティビティのonCreateメソッドが 2 回実行されます。

Task と Back Stack |を読みました。Android 開発者は、メイン アクティビティでandroid:launchMode、 、などのさまざまな組み合わせを使用してみました。android:clearTaskOnLaunchしかし、それはトリックではないようでした。

助言がありますか?Android 2.0 から 3.0 で、[戻る] ボタンを使用してアプリケーションを終了する方法に変更はありますか? それとも、Android のバージョンに関係なく、一部のデバイスでのみ発生するものですか?

アクティビティ:

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(getClass().getName(), "onCreate");
        setContentView(R.layout.main);
    }
}

レイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World, MyActivity" />
</LinearLayout>

マニフェスト:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7"/>
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="MyActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>
4

2 に答える 2

0

この問題の正しい解決策は、方向の変更が問題を引き起こさないように、アクティビティの onCreate メソッドで多くのことを行うことを避けることだと思います。

この質問を見てください:ローテーション Android でのアクティビティの再起動

または、マニフェストで宣言android:configChanges="orientation"することで、方向の変更時にアクティビティを破棄および再作成して代わりに呼び出すべきではないことを OS に通知する必要がありますonConfigurationChanged

于 2012-08-05T22:13:39.070 に答える
0

コードに追加すると、セルゲイは正しい

<activity android:name="MyActivity"
          android:label="@string/app_name"
          android:configChanges="orientation">

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(getClass().getName(), "onCreate");
    if(savedInstanceState == null) {
        setContentView(R.layout.main);
    }
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);

}

onCreate は、アクティビティの開始時に 1 回だけ実行されます。

于 2012-08-06T00:35:38.477 に答える