0

私は持っていTestActivityます。Buttonこのアクティビティは、プレス時にメインアクティビティから開始されます。これは、私のテストアクティビティがマニフェストファイルで宣言される方法です。

  <activity
        android:name="com.example.MyTestActivity"
        android:configChanges="keyboard|keyboardHidden"
        android:label="MYTESTACtivity"
        android:theme="@style/someTheme"
        android:windowSoftInputMode="stateHidden|adjustPan" >
    </activity>

ここで問題となるのは、TestActivity画面が表示されたら、向きを変更すると、のインスタンス数が1ずつTestActivity増えることです。もう一度ポートレートモードに変更すると、さらに1つ増えます。これは、向きの変更中にインスタンス数が増え続ける方法です。

向きの変更に関係なく、一度に1つのアクティビティインスタンスのみを作成する方法をアドバイスしてください。また、私はandroid:launchMode="SingleTop"まだ同じ問題が存在することを追加しようとしました。参考までに、これは厳密モードでインスタンス数を見つける方法です。

01-02 01:39:48.855: E/StrictMode(21992): android.os.StrictMode$InstanceCountViolation: class com.example.MyTestActivity; instances=20; limit=1
4

4 に答える 4

0

この投稿を見つけた他の新規参入者がこれを解決策として受け入れないことを期待して、コメントを回答に移動し、拡張することにしました。

android:configChanges:orientation | screensize

Androidは、非常に正当な理由で、構成の変更に関するアクティビティを破棄して再作成するように設計されています。これをマニフェストに追加して行っていることは、「私が行っていることを理解しています。Androidが設計どおりに動作することを望まないため、すべての結果を処理します。

状況によっては、これは正しい解決策ですが、ほとんどの場合、これは間違った解決策であり、「私の問題は解決されました」とはほど遠いです。実際、Androidが行うことを実行するためにさらにコードを記述しなければならないため、問題はおそらく始まったばかりです。自動的。より多くのコード=より多くのバグ=より低い保守性。

OPは正確な答えを提供するのに十分な詳細を提供しませんが、一般的に正しい答えは、アクティビティのライフサイクル(つまり、Androidがどのように機能するように設計されているか)について学び、それがアプリにどのように適用されるか、さまざまなコールバックを処理する方法について考えることです。 。特に、onCreate()、onStart()、onResume()の違い、およびonPause()とonStop()の違いを理解することが重要です。たとえば、onCreate()に多くのコードを入れることは、初心者にとってよくある間違いです。重要なコードのほとんどすべてがonCreate()で実行されているアプリを見たことがありますが、見栄えがよくありません。開発者は初めてホームボタンを押してからアプリに戻り、なぜ正しく機能しないのか疑問に思います。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Yddlはここで素晴らしい説明をします:

いつもandroid:configChanges = "keyboardHidden | orientation"を使ってみませんか?

賛成票を投じたい場合は、彼の回答を参照するだけなので、賛成票を投じてください。

于 2012-10-30T06:34:42.880 に答える
0

onCreate()呼び出しが必要です。向きを変更するたびに、アクティビティが破棄されてから再作成され、onCreate()が呼び出されます。ただし、既存のインスタンスは破棄されていないようで、私が知っている唯一の原因はリークです。一般的な原因は、アクティビティが破棄されたときにビットマップのバインドを解除しないことです。

于 2012-10-31T12:02:27.287 に答える
-2

デフォルトでは、実行時に画面の向きが変わると(ユーザーがデバイスを回転させた場合)、アクティビティはシャットダウンされて再開されます。これを防ぐには、マニフェストに次を追加します。

android:configChanges="keyboardHidden|orientation"

したがって、マニフェストは次のようになります。

<activity
    android:name="com.example.MyTestActivity"
    android:configChanges="keyboard|keyboardHidden"
    android:label="MYTESTACtivity"
    android:theme="@style/someTheme"
    android:windowSoftInputMode="stateHidden|adjustPan" 
    android:configChanges="keyboardHidden|orientation">
</activity>

詳細については、これを確認してください

于 2012-10-30T06:02:37.757 に答える
-3

これを追加してみてください:

<activity
    android:name="com.example.MyTestActivity"
    android:configChanges="keyboard|keyboardHidden|orientation"
   ...../>

オリエンテーションの変更中にアクティビティが再開されることはありません。

于 2012-10-30T06:07:27.037 に答える