問題タブ [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 - スタックの一番上にある場合でも、singleTop アクティビティが作成されることがある
launchMode が singleTop であるアクティビティがあります (マニフェスト内)。私の理解では、Activity が singleTop で、Activity スタックの一番上にある場合、新しい Intent で Activity を起動すると、Activity の新しいインスタンスが作成されることなく、実際に Activity で onNewIntent() が呼び出されます。 (したがって、onCreate() は呼び出されません)。
このアクティビティは、進行中の通知を表示するフォアグラウンド サービスを実行します。選択すると、この通知により、スタックの一番上にあるアクティビティにユーザーが戻されます (この singleTop アクティビティから起動されるアクティビティはありません)。私の問題は、通知が選択されると、Activity の新しいインスタンスが作成されることがあるということです。アクティビティがバックグラウンドで強制終了され、再起動された場合 (vs. onNewIntent() で前面に出された場合) とは動作が異なるように意図されているため、これは私のアクティビティにとって問題です。私のサービスが通知を表示するために使用するコードは次のとおりです。
このような動作が時々発生すると言いますが、発生すると、繰り返し発生します。例えば:
- MyProblematicActivity が初めて起動されました
- サービスが開始され、通知が表示されます
- 通知が選択されています。
- MyProblematicActivity が再度作成されます (サービスは既に開始されており、通知は既に表示されています)。
- 2 ~ 4 回の forevs を繰り返します。
時折、#3 の後、MyProblematicActivity の onNewIntent() が新しいインスタンスを作成せずに呼び出され、期待どおりに動作しました。
なぜこれが起こっているのか、私にはわかりません。タスクのルートにあるステート アクティビティは、singleTop アクティビティの動作に影響を与えますか? FWIW、MyProblematicActivity を作成するアクティビティは singleTask アクティビティです。
android - Android : 複数のアプリケーションのアクティビティで 1 つのタスクを作成する (Lauchmode の問題)
この Android の問題に対処する方法がわかりません。簡単に言えば、私の 2 つのアプリケーション間のフローは次のとおりです。
フロー
- アプリケーション Aをマーケット アプリケーション(AIDL)のサービスにバインドする
- BroadcastReceiver を登録し、 pendingIntent を返すサービス メソッドを呼び出します。
- PendingIntent を起動します(BillingActivity インスタンスを含みます)。
- 「 startActivityForResult() 」で PaymentActivityを開始します。
- いくつかのことを行い、終了します(finish() )。
- onActivitiyResult()メソッドで、ブロードキャストを送信して終了します。
- ブロードキャスト情報を取得します。
問題 :
以下のコンポーネントでタスクを作成したい:
- Top1Activity(アプリA)
- BillingActivity (マーケット アプリケーション)
- PaymentActivity (マーケット アプリケーション)
BillingActivity + PaymentActivity "launchMode"を変更しようとしました:
単一インスタンス
両方に新しいタスクが作成されます。戻るボタンを押す (または finish() メソッドを呼び出す) と、ユーザーは予想どおり前のアクティビティにリダイレクトされます。問題: 「StartActivityForResult」は複数のタスク間で使用できません(onActivityResult はすぐに呼び出されます)。
シングルタスク
BillingActivity で戻るボタンを押す (または finish() メソッドを呼び出す) と、ユーザーは(バックグラウンド タスクにあった) Top2Activity にリダイレクトされます。
私はそれを解決しようとして 48 時間以上を失いました。よろしくお願いします。必要に応じてコードを投稿できます。
ありがとうございました
----------- 編集 2015-02-02
David のアドバイスに従って、すべての特別な起動モードを削除しました。
TOP2Activity(バックグラウンド):
私のTop1Activity(フォアグラウンド):
BillingActivity (フォアグラウンド):
支払いアクティビティ:
pendingIntent を返す AIDL サービス:
BillingActivity (または PaymentActivity) から戻るボタンを押すと、まだ Top2Activity にリダイレクトされます ...
わかりませんか?ありがとうございました
android - AndroidにおけるLaunchModeの詳細説明
the concept and idea for using launchMode
Androidで学びたい。いつ、どのモードを使用するか、それぞれについて少し詳しく説明します。
アクティビティ間のアニメーション遷移で問題に直面しているためです。アクティビティ A から B に移動すると、アニメーションはスムーズに表示されますが、finish() を呼び出してアクティビティ A に戻ると、アニメーションが B から A に移動するように見えませんsingleInstance or singleTask to Activity in manifest
。また、Activity_reorder_to_front フラグやその他多くの回答を追加すると言う人もいます。今、私は誰にも私の問題を解決してほしくありません。自分の仕事を自分で成し遂げるために、これらの概念を学びたいだけです。
また、現在の状況に適したものを提案してください。私は終了を呼び出す必要があり、アクティビティ A の新しいインスタンスを作成したくありません。
android - Android が singleTask または singleInstance で複数のインスタンスを起動するのはなぜですか?
私が達成したいこと:
MainActivity は再利用する必要があります。つまり、もう一度実行したくはありませんが、同じアクティビティでonCreate()
のみ実行したいのですonResume()
が、奇妙な動作をしています。launchMode
AndroidManifest の が無視されているようです。私が設定したもの ( singleTask
、singleInstance
) は、常にヒープの増加につながる新しいアクティビティを作成します。ホームボタンでアプリを終了して再度起動すると、新しいインスタンスが作成されるたびに。(.hprof リーク レポートで確認)。
これはどのように見えるかです:
問題を切り分けようとしたところ、ホームを押すとアクティビティが強制終了される (onDestroy()
が実行される) ことがわかりましたが、リーク レポートにはこれが示されています。アプリを起動するたびに、MainActivity インスタンスがどんどん増えていきますが、最後のインスタンスは破棄されると言われています。どうしてonDestroy()
実行されたのでしょうが、アクティビティを開始したのと同じ数のインスタンスがあります (アプリの開始によって直接):
まったく実行されないのも興味深いことonDestroy()
です。なぜなら、私は決して電話finish()
をかけず、まだ多くのリソースを持っているからです。したがって、Android が Activity を kill する必要はありませんが、最初は上の問題の方が重要です。finish()
MainActivity の on ですべてのフラグメントを kill しているからかもしれませんonPause()
。そうしないと、フラグメントが漏れます。そして、おそらくMainActivityであるフラグメントのonDestroy()
呼び出し。super.onDestroy()
android - ホームボタンをオーバーライドして、戻るボタンを模倣するか、アクティビティをより速く起動します
HOME ボタンをオーバーライドして、Android の BACK ボタンとまったく同じように動作させたいと考えています。このサイトで同様の質問を見てきましたが、うまくいきません。
現在、ロック画面を作成しており、画面がオフのときはいつでもセキュリティ パスコードを超えるアクティビティを開くことができました。このようにして、ユーザーが画面を再びオンにすることを決定するとすぐに、アクティビティが開かれます。
これは機能しますが、私のBroadcastReceiver
内部Service
は信じられないほど遅いです。電源ボタンを十分に速くクリックすると、アクティビティがすぐに開かれず、ユーザーはアクティビティの前にセキュリティ パスコードを見ることができます (これはアプリの目的を無効にします)。
アクティビティがオンのときに戻るボタンをクリックし、画面をすばやくオフにしてからオンにすると、アクティビティもすばやく開きます。ただし、ホームボタンをクリックすると、アクティビティが再び起動するまでに数秒かかります。私が理解できる限り、これはスタックが各ボタンによってどのように管理されるかに関係しています。
などを使用singleTask
して、アクティビティが再起動されないようにしましたが、単に前面に移動しました。これもうまくいきません。あとは、戻るボタンの動作を模倣するだけですが、これは可能ですか?
私の受信機とサービスは次のとおりです。
ロック画面のアクティビティの下にあるマニフェストで、に設定launchMode
しましたsingleInstance/Task/Top
。私も試してみましsendToLockScreen.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
た。
android - アクティビティ起動モードの単一インスタンスの使用
2 つのアクティビティがあります。WebViewActivity と CameraPreviewActivity
ボタンをクリックするだけで、2 つのアクティビティを切り替えることができるはずです。CameraPreviewActivity を開始すると、その後のアクティビティの読み込みでカメラ ビューを初期化するのにそれほど時間はかかりません。前の状態から再開したようなものでなければなりません。
両方のアクティビティの起動モードを「単一インスタンス」のままにして、それぞれのボタンがクリックされたときにアクティビティを開始することは良い考えですか?
android - 設定アクティビティの呼び出し中に onActivityResult() が途中で呼び出されました
onActivityResult
すぐに呼び出されるという既知の問題に直面しています。
いくつかのリンクでその背後にある理由を読みました
呼び出されたアクティビティの起動モードを変更することをお勧めします。
しかし、私の場合、ユーザーがデータ接続を有効にできるように、設定アクティビティを開始(ナビゲート)しています。
そのため、設定アクティビティの起動モードを変更できません。
たとえば、いくつかのフラグを Intent に設定しようとしintent.setFlags(0);
ましたが、機能しません。
android - ランチャー アイコンをクリックしてアプリを起動すると、ランチャー アクティビティの onCreate() が呼び出されます
特定のフローで Android デバイスにアプリケーションをインストールしているときに、Android アプリケーションで非常に奇妙なバグを発見しました。
playstore(旧バージョン)からアプリをインストールしました。
アプリケーションを起動しました (今、私はホームスクリーンにいます.ie,
HomeActivity
)。今、最新のビルドをインストールしてアプリをアップグレードしました(製品ビルドで、まだプレイストアにリリースされていません)。
ランチャー アイコンをクリックし、ホーム画面が表示されるまで待ち、メニュー ボタンを押してアプリをバックグラウンドに保ちます。
次に、ランチャー アイコンをクリックしてアプリケーションを起動します。
この場合、Splash Screen( Activity
) が起動され、ホーム画面に移動します。ログでonStop()
は、HomeActivity の呼び出しが行われます。これは、Activity が破棄されないことを意味します。そのため、ランチャー アイコンをクリックすると、HomeActivity が再開され、代わりに、splashActivity が再作成されます。しかし、バックグラウンドからアプリを起動すると、アクティビティが再開され、スプラッシュ画面が表示されません。それは正しい行動ですか?もしそうなら、私は へのコールバックを取得していませんonDestroy()
。
以下は、マニフェスト内の私のアクティビティ コードです。
起動モードを に設定しませんでしたSplashActivity
。そしてしばらくすると正常になり、スプラッシュ画面が表示されなくなります。
また、アプリをバックグラウンドで起動するか、戻るボタンを押してからアプリのアイコンをクリックしても、このバグは再現されません。これは、ランチャー アイコンをクリックしたときにのみ発生し、アプリをバックグラウンドに保ち、しばらくすると適切になります。
また、アップデートせずにアプリをインストールしたところ、この問題は発生しませんでした。APKを更新したときのみ、これが発生します
なぜこれは最初の起動で発生するのですか..それはアンドロイドのバグですか..?もしそうなら、この問題を回避する方法..