4

スリープ モードに出入りするときに、Nexus 5 で奇妙な動作が発生します。本当に奇妙な方法でアプリを強制終了して再起動します。ログを表示します:

スリープモードに入る(電源ボタンを押す)

17.005: E/MotherActivity(28940): onPause が呼び出され
ました 17.025: E/MotherActivity(28940): onStop が呼び出され
ました 17.315: E/MotherActivity(28940): onDestroy が呼び出され
ました 17.365: E/GameTuto1Activity(28940): MainActivity コンストラクターが呼び出され
ました 17.365: E/MotherActivity (28940): onCreate が呼び出され
ました 17.695: E/MotherActivity(28940): onStart が呼び出され
ました 17.705: E/MotherActivity(28940): onResume が呼び出され
ました 17.705: E/MotherActivity(28940): onPause が呼び出されました

スリープモードからの復帰時、電話のロックを解除するとき

755: E/MotherActivity(28940): onResume が呼び出されました
935: E/MotherActivity(28940): onPause が呼び出されました
935: E/MotherActivity(28940): onStop が呼び出されました

そして、プロセスを強制終了するまで、電話はフリーズします。しかし、アプリケーションを再開する (スリープ モードから戻る) ときに onPause と onStop を実行するのはなぜですか。

Nexus7で同じことをしても起こらず、ライフサイクルは「正常」です。以下のログ:

スリープモードに入る(電源ボタンを押す)

43.782: E/MotherActivity(19876): onPause が呼び出されました 43.822: E/MotherActivity(19876): onStop が呼び出されました

スリープモードからの復帰時、電話のロックを解除するとき

50.142: E/MotherActivity(19876): onRestart が呼び出されました 50.142: E/MotherActivity(19876): onStart が呼び出されました 50.172: E/MotherActivity(19876): onResume が呼び出されました

質問は奇妙で雑多ですが (おそらく)、答えは非常にスマートです。それで、あなたがアイデアを持っているなら?これは、3 つのスレッドがあるプロジェクトでのみ発生します。2 つのループ スレッド (onPause で強制終了) と、PoolExecutor によって管理される 1 つのスレッド (onPause でも強制終了) です。単純なアプリをやっても再現されません。Nexus5 version=4.4.2, nexus7 version=4.2.2
その質問にはコードがありません。プロジェクトを共有できません。
しかし、その質問について考えてくれるすべての人に前もって感謝します。
マティアス .... 5 時間後: 答えへのリード ...... 私の活動に関する私のマニフェストには、次のものがありました。

<activity  
        android:name=".MainActivity"  
        android:label="@string/title_activity_main"  
        **android:screenOrientation="landscape"**
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >  
        <intent-filter>  
        <action android:name="android.intent.action.MAIN" />  
            <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
    </activity>  

android:screenOrientation="landscape" を削除すると、正常に動作します。なぜこれが起こるのかについて何か考えはありますか?向きを横向きに設定できず、configurationChange イベントを忘れてしまったのはなぜですか。
最悪の場合、向きの設定が変更されたことを聞くと、次のようになります。

android:configChanges="orientation"

メソッド onConfigurationChanged は呼び出されません!!! しかし、私が使用する場合: android:configChanges="orientation|screenSize" と onConfiguration を上書きすると動作します....

いったいなぜ、screenOrientation=landscape は screenSize 構成の変更を処理できないのでしょうか。その混乱を処理し、システムに「私が横向きモードにいる人は、電話をスリープモードにしたときに縦向きにねじ込まないでください」と言う別のきれいな方法はありますか.
ここに誰かが知っているなら、答えてくれてありがとう。

それ以外の場合、アプリケーションを縦向きまたは横向きにしたい場合は、マニフェストに android:configChanges="orientation|screenSize" を設定し、アクティビティの onConfigurationChanged を上書きする必要があります (何もしないため)。oO'

4

1 に答える 1