問題タブ [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.
android - AndroidManifest.xml で launchMode を定義する方法 - PhoneGap と JQM の使用
アプリケーションを 1 つのインスタンスに制限するのに苦労しています。現在、ユーザーがホーム画面を押してアプリケーションを終了し、外部で何かをしてアプリケーションのアイコンを再度クリックすると、アプリケーションの 2 番目のインスタンスが起動します。
ここに私の完全なマニフェストファイルがあります:
単一のアクティビティ アプリです (基本的にアクティビティは定義されていません)。メインの JQM ページには、次のようなエントリがあります。
私のマニフェストが正しいかどうか、そして私が使用すべきかどうか教えてください
またはそれは他のようなものでなければなりません
また
前もって感謝します。
android - 実行中にアプリが上書きされた場合の Android アプリの起動動作が変更されました
アプリの起動動作が複雑になる! 実行中にアプリを上書きしてアップグレードした後、再起動の動作に問題があります。
通常、アイコンをクリックして再開すると、ホームキーによって停止されたため、実行中の最後のアクティビティが表示されます。これは期待どおりに動作し、すべてのアクティビティは標準の launchMode で呼び出されます。
そこは問題ありませんが、ここで問題です。実行中に同じapkを実行して再インストールまたはアップグレードすると、アプリは常にandroid.intent.category.LAUNCHERプロパティを持つアクティビティAで起動し、アプリを強制終了するまで最後のアクティビティBを表示しませんタスクマネージャーを起動して再起動してください。
この動作はわかりません。また、Play ストアでアップグレードしたときに同じ問題が発生するかどうかもわかりません。
私が見つけた状況を満たすためのシーケンスは次のとおりです
- アプリをインストールします (アプリには少なくとも 2 つのアクティビティが必要です。1 つはランチャーとして、もう 1 つは移動するためのものです)。
- アプリアイコンでアプリを起動
- LAUNCHERアクティビティAが表示されます
- アクティビティBに移動
- ホームキーを押します
- アプリのアイコンでアプリをもう一度起動します
アクティビティBでアプリ起動 <------------------------------------- チェックポイント!大丈夫だよ。
ホームキーを押します
- 同じバージョン以上でアプリを再インストールする
- アプリアイコンでアプリを起動
- アプリはアクティビティ A で起動します
- アクティビティBに移動
- ホームキーを押します
- アプリアイコンでアプリを起動
アクティビティAでアプリ起動 <---------------------------------------- チェックポイント!何か問題でも。
アプリを殺す
- アプリアイコンでアプリを起動
- アプリはアクティビティ A で起動します
- アクティビティBに移動
- ホームキーを押します
- アプリアイコンでアプリを起動
- アクティビティBでアプリ起動 --------------------------- チェックポイント!問題はなくなりました。
静的オブジェクトの問題など、この問題についてさらに問題が発生したと思います。なぜこのようなことが起こるのか教えてください。
ありがとう。
android - 「ホーム」キーを押すと他のアクティビティが破壊されるのはなぜですか?
二つの活動がActivityA
ありActivityB
、どちらも作られてsingleTask
います。ここで、 ActivityBはカテゴリHOME
であり、always に設定されています。私はonからActivityAを開始しています。期待どおりにActivityAを開始していますが、 HOME KEYを押すと (これはActivityBです)、ActivityAが破棄されます。
考えられる理由は何ですか?ActivityAが破棄されないようにするにはどうすればよいですか? 両方の活動を維持することによって。BroadcastReceiver
ACTION_BOOT_COMPLETED
singleTask
これは BroadcastReceiver です。
マニフェスト ファイルは次のとおりです。
android - Android: 複数のインテント フィルターを使用した SingleTop の動作
SingleTop アクティビティの次の奇妙な動作に苦労しています。
そのアクティビティでいくつかのインテント フィルターを定義しました。
このコードは、アクティビティを開始する必要があります。
DashboardActivity の onResume で、対応するアクションを確認します。
しかし、このコードを実行すると、常にandroid.intent.action.MAIN
アクションが発生します。singleTop
起動モードを削除すると、新しいアクティビティが起動されますが、正しいインテントが渡されます。アクティビティの同じインスタンスを使用する必要があるためsingleTop
、singleTask
またはsingleInstance
ジョブを実行する必要があります。しかし、ここで何が問題なのかわかりません。ヘルプ!
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+1
、n+1
スタックの一番上に移動されます
singleTask はこのスタックを作成します
... n, n+1
singleInstance がこのスタックを作成します
n+1
以前のすべての活動が閉鎖されている場所。
どちらも望んでいません。
使用できる起動モードはありますか?
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
このアクティビティが最初から再度読み込まれないようにするだけですが、履歴内の重複したアクティビティをクリアしません。おそらく、使用できるフラグの組み合わせがありますか? または、アクティビティスタックのインデックスでそのアクティビティを見つけて、それが最新のアクティビティでない場合は削除できますか?
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 が上にとどまるようにします。
何か案は?
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:
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 しかありません。
テストシナリオ
- MainActivity を開始します。
- AffinityTestActivity を開始します。
- AffinityTestActivity を終了します (AffinityTestActivity が終了すると、MainActivity が再開され、HelloActivity が開始されます)。
- 出力を分析します。
ログ
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) のように、それを回避してアプリケーションに「通常の」アクティビティ ライフサイクルを強制するにはどうすればよいですか?
はるかに複雑で、そのアクティビティのライフサイクルで動作するアプリケーションを開発していますが、この動作はアプリケーションの機能に違反しています。
どうもありがとうございました!