問題タブ [launchmode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
11315 参照

android - AndroidManifest.xml で launchMode を定義する方法 - PhoneGap と JQM の使用

アプリケーションを 1 つのインスタンスに制限するのに苦労しています。現在、ユーザーがホーム画面を押してアプリケーションを終了し、外部で何かをしてアプリケーションのアイコンを再度クリックすると、アプリケーションの 2 番目のインスタンスが起動します。

ここに私の完全なマニフェストファイルがあります:

単一のアクティビティ アプリです (基本的にアクティビティは定義されていません)。メインの JQM ページには、次のようなエントリがあります。

私のマニフェストが正しいかどうか、そして私が使用すべきかどうか教えてください

またはそれは他のようなものでなければなりません

また

前もって感謝します。

0 投票する
0 に答える
227 参照

android - 実行中にアプリが上書きされた場合の Android アプリの起動動作が変更されました

アプリの起動動作が複雑になる! 実行中にアプリを上書きしてアップグレードした後、再起動の動作に問題があります。

通常、アイコンをクリックして再開すると、ホームキーによって停止されたため、実行中の最後のアクティビティが表示されます。これは期待どおりに動作し、すべてのアクティビティは標準の launchMode で呼び出されます。

そこは問題ありませんが、ここで問題です。実行中に同じapkを実行して再インストールまたはアップグレードすると、アプリは常にandroid.intent.category.LAUNCHERプロパティを持つアクティビティAで起動し、アプリを強制終了するまで最後のアクティビティBを表示しませんタスクマネージャーを起動して再起動してください。

この動作はわかりません。また、Play ストアでアップグレードしたときに同じ問題が発生するかどうかもわかりません。

私が見つけた状況を満たすためのシーケンスは次のとおりです

  1. アプリをインストールします (アプリには少なくとも 2 つのアクティビティが必要です。1 つはランチャーとして、もう 1 つは移動するためのものです)。
  2. アプリアイコンでアプリを起動
  3. LAUNCHERアクティビティAが表示されます
  4. アクティビティBに移動
  5. ホームキーを押します
  6. アプリのアイコンでアプリをもう一度起動します
  7. アクティビティBでアプリ起動 <------------------------------------- チェックポイント!大丈夫だよ。

  8. ホームキーを押します

  9. 同じバージョン以上でアプリを再インストールする
  10. アプリアイコンでアプリを起動
  11. アプリはアクティビティ A で起動します
  12. アクティビティBに移動
  13. ホームキーを押します
  14. アプリアイコンでアプリを起動
  15. アクティビティAでアプリ起動 <---------------------------------------- チェックポイント!何か問題でも。

  16. アプリを殺す

  17. アプリアイコンでアプリを起動
  18. アプリはアクティビティ A で起動します
  19. アクティビティBに移動
  20. ホームキーを押します
  21. アプリアイコンでアプリを起動
  22. アクティビティBでアプリ起動 --------------------------- チェックポイント!問題はなくなりました。

静的オブジェクトの問題など、この問題についてさらに問題が発生したと思います。なぜこのようなことが起こるのか教えてください。

ありがとう。

0 投票する
0 に答える
330 参照

android - 「ホーム」キーを押すと他のアクティビティが破壊されるのはなぜですか?

二つの活動がActivityAありActivityB、どちらも作られてsingleTaskいます。ここで、 ActivityBはカテゴリHOMEであり、always に設定されています。私はonからActivityAを開始しています。期待どおりにActivityAを開始していますが、 HOME KEYを押すと (これはActivityBです)、ActivityAが破棄されます。 考えられる理由は何ですか?ActivityAが破棄されないようにするにはどうすればよいですか? 両方の活動を維持することによって。BroadcastReceiverACTION_BOOT_COMPLETED
singleTask

これは BroadcastReceiver です。

マニフェスト ファイルは次のとおりです。

0 投票する
1 に答える
875 参照

android - Android: 複数のインテント フィルターを使用した SingleTop の動作

SingleTop アクティビティの次の奇妙な動作に苦労しています。

そのアクティビティでいくつかのインテント フィルターを定義しました。

このコードは、アクティビティを開始する必要があります。

DashboardActivity の onResume で、対応するアクションを確認します。

しかし、このコードを実行すると、常にandroid.intent.action.MAINアクションが発生します。singleTop起動モードを削除すると、新しいアクティビティが起動されますが、正しいインテントが渡されます。アクティビティの同じインスタンスを使用する必要があるためsingleTopsingleTaskまたはsingleInstanceジョブを実行する必要があります。しかし、ここで何が問題なのかわかりません。ヘルプ!

0 投票する
2 に答える
131 参照

android - Androidアクティビティの順序、スタックをクリアする代わりに、現在のアクティビティのインスタンスを1つだけ必要とします

singleTask と singleInstance だけでは答えになりません。

スタックにアクティビティがあります ... n, n+1, n+2

の要素をn+2開くことができますn+1

これによりスタックが作成されます

... n, n+1, n+2, n+1

スタックを作成したい

... n, n+2, n+1n+1スタックの一番上に移動されます

singleTask はこのスタックを作成します

... n, n+1

singleInstance がこのスタックを作成します

n+1以前のすべての活動が閉鎖されている場所。

どちらも望んでいません。

使用できる起動モードはありますか?

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORYこのアクティビティが最初から再度読み込まれないようにするだけですが、履歴内の重複したアクティビティをクリアしません。おそらく、使用できるフラグの組み合わせがありますか? または、アクティビティスタックのインデックスでそのアクティビティを見つけて、それが最新のアクティビティでない場合は削除できますか?

0 投票する
1 に答える
222 参照

android - onResume時に他のアプリからAndroidアクティビティを開始すると問題が発生する

2 つのアクティビティがあります。1 つは MainActivity (起動アクティビティ) で、もう 1 つは MaskActivity です。他のアプリからアプリを起動し、MainActivity から MaskActivity を起動すると (現在、MaskActivity は MainActivity の上にあります)、電話のホーム ボタンを押してアプリを再起動すると、新しい MainActivity が起動され、一番上に配置されます。 MaskActivity と古い MainActivity の、私が望むものではありません。

しかし、(他のアプリからではなく) プログラム リストからアプリを起動すると、アプリを再起動すると、新しい MainActivity は開始されず、MaskActivity は MainActivity の上にあります。

私の MainActivity の launchMode は「singleTop」です。これが問題かどうかはわかりません。単純に「singleInstance」に変更しないと、他の人は問題を解決できません。「SingleInstance」に変更すると、新しい MainActivity は開始されませんが、MainActivity が最上位になります。しかし、プログラムが一時停止する前に MaskActivity が MainActivity の上にある場合、プログラムが再開されたときに MaskActivity が上にとどまるようにします。

何か案は?

0 投票する
2 に答える
2684 参照

android - SplashScreen でのアクティビティ SingleTask の動作

私のアプリには次のものがあります。

-SplashScreen (SSc) アプリケーションの準備 (サービスの開始など) -MainActivity (MA) ほとんどのアクションを処理するアプリの最も関連性の高い部分 -およびそれほど関連性のないその他のアクティビティ

私のアプリでは、launchMode singleTask のような動作が必要です。これにより、SMS/EMail アプリでリンクをクリックして開いた場合でも、アプリが常に新しいタスクとして開始されます。アクティビティはすべて連続してナビゲートできるため、アクティビティのインスタンスを 1 つだけ持つのが最善です。

ただし、SSc を singleTask として起動すると、それはスタックのルートであり、MainActivity に移動し、ホームを押して、ランチャー アイコンをもう一度クリックすると、アプリが完全に再起動されます。そのため、SSc が再び表示されます。この状況では、代わりに MainActivty を前面に出してほしいと思います。

私の願いは次のとおりです: launcherclick -> SSc -> MA -> HOME -> launcherclick -> MAを前面に移動 -> HOME -> 最近から再起動 -> MAを前面に移動

リンクをクリック -> SSc/MA (最初の起動かどうか) 同じインスタンスで

私のアプリでは、複数のインスタンスを持つことは意味がありません。バックグラウンド サービスは一度に 1 つの MainActivity しか処理しないためです。これは、見られる「モノ」のためだけに頻繁にデータをポーリングするためです。

この目標を達成するための推奨事項はありますか?

私の最初のアイデアは、他のアクティビティにインテントをルーティングするためのレイアウトのない launchMode singletask を使用した LauncherActivity でした (これはおそらく singleTop !?、その場合は 1 つのタスクにしか含まれないため)。

マニフェスト xml:

0 投票する
1 に答える
2260 参照

android - Android 4.4.X: taskAffinity & launchmode と Activity ライフサイクル

私が気付いた Android 4.4.X デバイスでのいくつかの奇妙な動作を示す簡単なアプリケーションを開発しました。

2 つの「メイン」アクティビティが必要であるとします。最初のアクティビティは、再開されるたびに「Hello」(「HelloActivity」を開始して) と言い、2 番目のアクティビティはandroid:launchMode="singleTask" android:taskAffinity=".MyAffinity"定義済みです。2 つ目は最初のものによって開始されます。

マイコード

マニフェストは非常に単純です。

MainActivityは、ボタンのクリック時に AffinityTestActivity を開始し、そのライフサイクルをログに記録します。また、再開されるたびに HelloActivity を開始します。

AffinityTestActivityは、ボタンのクリック時に finish() を呼び出し、そのライフサイクルをログに記録します。

実際、HelloActivity は AffinityTestActivity と同じです。finish() を呼び出すボタンと、そのライフサイクルを記録する printlns しかありません

テストシナリオ

  1. MainActivity を開始します。
  2. AffinityTestActivity を開始します。
  3. AffinityTestActivity を終了します (AffinityTestActivity が終了すると、MainActivity が再開され、HelloActivity が開始されます)。
  4. 出力を分析します。

ログ

Android 4.4.2 および 4.4.3 : (Nexus 7 II および Samsung Galaxy S5 でテスト済み) ご覧のとおり、ログは HelloActivity の onPause で終了しますが、これは意味がありません (HelloActivity は手順 3 で一番上に表示されます)。また、AffinityTestActivity は破棄されず、MainActivity は一時停止されません。

古いバージョンの Android (<4.4.2、2.3.5、4.1.2、および 4.2.1 デバイスでテスト済み、4.0.3 エミュレーター) は期待どおりに動作します - onResume 後に HelloActivity が一時停止されず、AffinityTestActivity が破棄されます。

私の質問

  • Android 4.4.X デバイスで HelloActivity が開始された直後に一時停止されて上部に表示されるのはなぜですか?
  • 古い Android バージョン (<4.4.2) のように、それを回避してアプリケーションに「通常の」アクティビティ ライフサイクルを強制するにはどうすればよいですか?

はるかに複雑で、そのアクティビティのライフサイクルで動作するアプリケーションを開発していますが、この動作はアプリケーションの機能に違反しています。

どうもありがとうございました!