[解決済み】アプリが再開されず、再起動する。
質問
解決策とまではいかなくても、少なくともある動作の説明について、誰かが手助けしてくれるといいのですが。
問題点
あるデバイスでは、ランチャーアイコンを押すと現在のタスクが再開され、別のデバイスでは、最初の起動意図が発生します (事実上アプリが再起動します)。なぜこのような現象が発生するのでしょうか?
ディテールについて
Launcher Icon"を押すと、アプリが普通に起動する - つまり、最初の名前を持つIntentが起動するのだと思います。
Activity
というアクションで
android.intent.action.MAIN
とカテゴリ
android.intent.category.LAUNCHER
. しかし、これは常にそうであるとは限りません。
大半の端末では、アプリが既に起動している状態でランチャーアイコンを押すと、そのプロセスで現在起動しているアクティビティが再開されます(
NOT
最初の
Activity
). OSメニューの"最近のタスク"から選択した場合と同じように再開されます。これは、私が欲しい動作です
すべて
デバイスを使用します。
しかし、他の一部のデバイスでは、異なる動作が発生します。
-
Motorola Xoomでは、ランチャーアイコンを押したときに、アプリが 常に 初期起動を開始する
Activity
現在起動しているものに関係なく ランチャーアイコンは常に "LAUNCHER" のインテントを開始すると仮定しています。 -
Samsung Tab 2では、ランチャーアイコンを押すと、アプリをインストールしたばかりの場合は、必ず最初に起動する
Activity
(Xoomと同じ) - しかし、インストール後にデバイスを再起動すると、ランチャーアイコンが代わりにアプリを再開します。これらのデバイスは、デバイスの起動時に、インストールしたアプリをルックアップテーブルに追加し、ランチャーアイコンが実行中のタスクを正しく再開できるようにしているのではないでしょうか?
という回答を何度も読みました。
音
を追加するだけで、私の問題と同じようなことができます。
android:alwaysRetainTaskState="true"
を使用するか
launchMode="singleTop"
から
Activity
は答えにならない。
編集する。
本アプリの直近の起動後、この挙動が発生し始めたのは すべて デバイスを再起動すると おかしいと思うのですが、再起動のプロセスを調べても、何が問題なのかがわかりません。
解決方法を教えてください。
アハッ!(tldr;下部の太字の文を参照)
問題を発見した... と思います。
ということで、まずは仮定から。ランチャーを押すと、デフォルトの
Activity
または、もし
Task
が開いている場合、それを最前面に表示します。別の言い方をすれば、ナビゲーションのどの段階でも、新しい
Task
と
finish
を指定すると、ランチャーがアプリを再開しなくなります。
もしその推測が本当なら、それはバグのはずです。
Task
は同じプロセスで、最初に作成されたものと同じように有効なレジュメ候補となるのでしょうか?
私の問題は、これらのフラグをいくつかの
Intents
:
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
というのは一目瞭然ですが
FLAG_ACTIVITY_NEW_TASK
は新しい
Task
, 上記の仮定が有効であることを理解していなかったのです。確かにこれは犯人だと思い、削除してテストしてみましたが、やはり問題があったので却下しました。しかし、まだ以下のような状態でした。
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
スプラッシュ画面が"main"を起動していました。
Activity
というフラグを立てています。結局のところ、もし私が私のアプリを "restart" して
Activity
がまだ実行中だった場合、私はむしろその状態情報を保存したいのです。
でお気づきでしょう。
ドキュメント
を開始することについては言及されていません。
Task
:
設定されている場合、起動されるアクティビティがすでに 現在のタスクの新しいインスタンスを起動する代わりに、その アクティビティが終了すると、その上にある他のアクティビティはすべて終了し このインテントは、(今トップになっている)古いアクティビティに、1つのインテントとして配信されます。 新しいIntent
例えば、アクティビティからなるタスクを考えてみましょう。A, B, C, Dのアクティビティからなるタスクを考える。 DがstartActivity()を呼び出したとき、そのIntentは、A, B, C, Dに解決される。 アクティビティBのコンポーネントが終了すると、CとDは終了し、BはアクティビティBのコンポーネントを受け取ります。 となり、その結果、スタックは次のようになります。A, B となる。
上記の例で現在実行中のアクティビティBのインスタンスは、次のようになります。 ここで開始する新しいインテントを、その onNewIntent() メソッドを呼び出すか、あるいはそれ自体を終了して新しい インテントがあります。起動モードを "multiple"と宣言している場合 (これは デフォルト)で、FLAG_ACTIVITY_SINGLE_TOPを設定していない場合は、同じ イントは終了して再作成されます。 モード、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは を現在のインスタンスの onNewIntent() に送出します。
この起動モードは、次のように組み合わせても効果的です。 FLAG_ACTIVITY_NEW_TASK: タスクのルート・アクティビティを開始するために使用する場合。 そのタスクの現在実行中のインスタンスがあれば、それを をフォアグラウンドにし、それをルート状態にクリアする。これは特に 例えば、通知からアクティビティを起動するときに便利です。 マネージャーを使用します。
そこで、以下のような状況になりました。
-
A
起動B
とFLAG_ACTIVITY_CLEAR_TOP
,A
の仕上がりになります。 -
B
はサービスの再起動を希望しているので、ユーザーをA
サービス再開のロジックを持つ とUI(フラグなし)があります。 -
A
打ち上げB
をFLAG_ACTIVITY_CLEAR_TOPで表示します。A
を終了させます。
この段階で、2番目の
FLAG_ACTIVITY_CLEAR_TOP
フラグが再起動する
B
タスクスタックにある を破壊しなければならないと考えています。
Task
を起動し、新しいものを開始するため、私の問題が発生します。
では、もし私の仮定がすべて正しければ。
-
その
Launcher
は、最初に作成されたタスクの再開のみ -
FLAG_ACTIVITY_CLEAR_TOP
を再起動させると、唯一残っているActivity
を再作成し、さらに新しいTask
関連
-
[解決済み】Android - SDKバージョン23のアップデート後、ACTION-VIEWインテントフィルタを持つアクティビティを少なくとも1つ追加する。
-
[解決済み】「ArrayAdapterはリソースIDがTextViewであることが必要」XMLの問題点
-
[解決済み】java.lang.RuntimeException: アクティビティを開始できない ComponentInfo
-
[解決済み】Android Studioの初回起動。Android SDKアドオンリストにアクセスできない
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み】getCheckedRadioButtonId()が無駄なintを返す?
-
[解決済み] Android Studioで「URIが登録されていません」と報告されるのはなぜですか?[クローズド]
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] Android Fragment onAttach() 非推奨
-
[解決済み] BackStackから既存のFragmentをレジュームする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】OnFragmentInteractionListenerを実装する方法
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み】apkファイルのインストール中に「パッケージが破損しているようです」というエラーが発生する。
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み】Android Studioで最新バージョンのgradleを使用する方法
-
[解決済み] コンパイルした.apkを端末にインストールしようとするとINSTALL_FAILED_UPDATE_INCOMPATIBLEが表示される
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Android Fragment no view found for ID?
-
[解決済み] Gradleのエラーです。イベントディスパッチスレッドからの書き込みアクセスは、Android Studioでのみ許可されます。