2011-08-01 23 views
14

私は、最初のアクティビティ(A - ランチャで指定されたもの)を持つアプリケーションを持っています。私は、アクティビティBの状態を保存しています(onSaveInstanceState()とonCreate()にリストアしています)。ホームボタンを押した後にアプリケーションを再起動すると、現在の初期アクティビティが表示されない

ユーザーがホームボタンを押して(つまり、アプリがバックグラウンドに移行して)すぐにアプリを再起動した場合、Bを起動した後のいくつかの携帯電話(N1とMotrolaマイルストーンは今のところギャラクシーSではありません)アクティビティA(Bではなく)しかし、最近のアプリ(ホームボタンの長押し)から起動すると、アクティビティBに移動します。

Androidのドキュメントについては、タスクが終了していない限りここではアプリの画面からアクティビティを再起動する以外は何もしません)、起動時にアクティビティBが復元されることがわかります(スタックの上にあるように)。だから私はちょうどここで何が間違っているか把握していないようです。

アプリの使用中にBTWの方向変更がうまくいきます(すべてが保存され、元に戻されます)。この奇妙な問題は今や私を悩ませています。試行錯誤の結果、私はそのアクティビティのオリエンテーションを無効にし、再起動してBを期待どおりに表示しようとしたときに、

他の誰かがこのようなことに直面していますが、どうすればこれを解決できますか?

私はSharedPreferences(前述のようにin this post)で実行中のアクティビティを保存していますが、アクティビティAのアクティビティから復元していますが、ここで何か不足しているかどうかを知りたいと思います。 B restored on re-launchをデフォルトの動作にする必要はありませんか?

android:launchMode="singleTask" 

私が正しくあなたの問題を理解していればこれが....私のアプリで問題を解決:マニフェストファイル内の自分の活動にこれを追加すること

+0

ところで、この動作がAndroidサンプルアプリにも存在することが確認されました。 Photostreamアプリ(http://developer.android.com/resources/articles/faster-screen-orientation-change.html)とContactManager(http://developer.android.com/resources/samples/ContactManager/index)を試してみました。 .html)。両方とも同じ問題を示しています。 –

+1

さて、あなたはあなたの活動をどのように開始するかを常に見ていることができます。あなたが提供するドキュメンテーションから、特に[android:alwaysRetainTaskState'と 'android:clearTaskOnLaunch']を見ることができます(http://developer.android.com/guide/topics/manifest/activity-element.html)。とにかく、アイコン/ショートカットを使用して再起動したときの主なアクティビティから始まる** **はデフォルトの動作です。 –

+0

このAndroidのバグが表示されている可能性があります:http://stackoverflow.com/questions/11296203/on-click-of-shortcut-on-homescreen-launching-from-spalsh-screen-in-android –

答えて

1

してみてください。

+0

しかし、私の疑いを明確にしていません:( –

+0

それはあまりにも動作しませんでした:( –

1

使用のandroid:あなたのAndroidManifestでlaunchMode = "singleInstance" の代わりに

0

、アクティビティタグでは、単にアイコンが押されたときに、アプリケーションの別のインスタンスが起動されるためです

android:alwaysRetainTaskState="true" 
0

を追加します。

// To prevent launching another instance of app by clicking app icon 
       if (!isTaskRoot() 
         && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) 
         && getIntent().getAction() != null 
         && getIntent().getAction().equals(Intent.ACTION_MAIN)) { 

        finish(); 
        return; 
       } 

上記のコードは、setContentViewを呼び出す前にランチャーアクティビティで記述してください。これは問題を解決します

0

この回答は、類似した種類の問題のために検索エンジンから来る人を対象としています。

私が持っていた、

Launcher Activity -> A 
Main Activity -> B 

は必ずHOMEボタンを押すか、アプリケーションがBにあったときに、タスクの一覧から切り替えた後を開始します。

最後に、問題はマニフェストであることがわかったマニフェストにBの活動宣言からandroid:noHistory = "true"

を除去し、それを解決しました。

関連する問題