問題タブ [taskaffinity]
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 - 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) のように、それを回避してアプリケーションに「通常の」アクティビティ ライフサイクルを強制するにはどうすればよいですか?
はるかに複雑で、そのアクティビティのライフサイクルで動作するアプリケーションを開発していますが、この動作はアプリケーションの機能に違反しています。
どうもありがとうございました!
bash - コマンドの可換性
答えを再確認するために、この質問をする必要があります。
コマンドの順序は重要ですか? 例えば:
このコマンドですか
等しい
?
タスクセットに続くすべてのコマンドが同じ CPU アフィニティを持つのか、それともその直後のコマンドだけを持つのかを知る必要があります。
android - 個別の taskAffinity を持つ 2 つのランチャー アイコンを持つ Android アプリ
2 つのランチャー アイコンと 2 つの異なるアクティビティを備えたアプリがあります。マニフェスト ファイルは次のようになります。
MyActivity
インストール後に開くデフォルトの画面にしたいので、使用し.category.DEFAULT
ました。
action.MAIN
とcategory.LAUNCHER
は、2 つの個別のランチャー アイコンを表示します (1 はMyActivity
、1 はMySettings
)。
問題:を開くMyActivity
と、MySettings
画面も開いてしまいます。各ランチャー アイコンで、対応するアクティビティのみを開きます。問題を解決するために各アクティビティに使用taskAffinity
しましたが、機能しませんでした。動作させるには、私の場合はできないtaskAffinity
フラグでアクティビティを開始する必要があると思います(両方ともアクティビティを起動します)。Intent.FLAG_ACTIVITY_NEW_TASK
私も使用しようとしましandroid:launchMode="singleTask"
たが、どちらも機能しませんでした。
各ランチャー アイコンを作成してその Activity のみを開くにはどうすればよいですか?
更新:申し訳ありませんが、MyActivity
開いていないことに気付きMySettings
ました。MyActivity
には UI がなかったため、 のような空白の画面が表示されましたMySettings
。taskAffinity
正しく動作します。UIを非表示にするために追加android:theme="@android:style/Theme.NoDisplay"
しました。MyActivity
android - Android:アプリケーションのコンテキストが与えられたときに、どのランチャー アイコン/アクティビティがアプリケーションを開始したかを知る方法は?
アプリに追加すると2番目のランチャーアイコンが追加されるライブラリを作成しました(ネットワークのデバッグに使用されます)。ライブラリは、コンテキストを使用してアプリケーションから、またはアクティビティから初期化できます。知りたいですアプリケーションが2番目のランチャーアイコンまたは別のアイコンから起動された場合、私のlibに。
taskAfinity
もう 1 つ、2 番目のランチャーとは異なる点があります。
ライブラリはこちらのオープンソースでもあります: https://github.com/shehabic/sherlock