問題タブ [android-task]
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「L」で最近のタスクを取得する方法は?
バックグラウンド
私のアプリでは、最近起動された時間でアプリ リストを並べ替えることができます。
問題
Android "L" の時点で、関数getRecentTasksは、ドキュメントに記載されているように、現在のアプリが起動したアプリのリストを返すだけです:
アプリで ActivityManager.getRecentTasks() を使用している場合...
今後のリリースでの新しい同時ドキュメントおよびアクティビティ タスク機能の導入により (以下の [最近使用した画面での同時ドキュメントおよびアクティビティ] を参照)、ActivityManager.getRecentTasks() メソッドは、ユーザーのプライバシーを改善するために非推奨になりました。下位互換性のために、このメソッドは、呼び出し元のアプリケーション自体のタスクと、場合によってはその他の非機密タスク (ホームなど) を含む、データの小さなサブセットを返します。アプリがこのメソッドを使用して独自のタスクを取得している場合は、代わりに android.app.ActivityManager.getAppTasks() を使用してその情報を取得します。
ADT を使用してこの関数のドキュメントを表示する場合も同じことが書かれています (現在インターネットでは利用できません)。
このメソッドは非推奨です。L の時点で、このメソッドはサードパーティのアプリケーションでは使用できなくなりました。ドキュメント中心の最近の機能の導入により、呼び出し元に個人情報が漏洩する可能性があるためです。下位互換性のために、データの小さなサブセットを返します。少なくとも呼び出し元自身のタスク (ただし、その情報を取得するためにサポートされている正しい方法については getAppTasks() を参照してください)。敏感にならないでください。
ユーザーがどのアプリを持っているかを簡単に確認でき、許可がなくても簡単に確認できるため、なぜこの行為が行われたのかわかりません。
これは私が追加したこの機能の大きな制限なので、これを克服する方法があることを願っています.
私が試したこと
今のところ、最近起動されたアプリについてのヒューリスティックな方法のみを使用しました。代わりに、実行中のプロセスのリストを取得します。
プロセスの重要度の値とおそらく「importanceReasonComponent」を使用することもできますが、これはすべてヒューリスティックと推測にすぎません...
質問
この制限を克服する方法はありますか? 私が考えていない回避策はありますか?
多分それはルートで可能ですか?またはビジーボックス?
android - バックグラウンドプロセスが1に制限されている場合のAndroid削除タスク履歴
シナリオ:
私のアプリケーションは次のことを行います。
- ボタンを表示します
- ボタンをクリックすると、タスク内の別のアプリケーションから新しいアクティビティが表示されます。
その新しいアクティビティ内でクリックして戻ると、アプリケーションに戻ると思います。これは、標準操作で発生します。
ただし、「バックグラウンド プロセスの制限」を「1 プロセス」に設定すると、これは機能しなくなります。反撃すると、タスクランチャーに戻るだけです。Android は、以前のタスク スタックで (破棄された) アクティビティを再作成しようとはしません。(それらの onCreate メソッドは呼び出されません)
android:alwaysRetainTaskState="true" をルート アクティビティ (およびユーザーが操作するすべてのアクティビティ) に配置しようとしましたが、この一見正しくない動作が残っています。
これは Android での意図的な動作ですか? 現実世界のユーザーは、私のアプリがこのように動作することに遭遇する可能性はありますか?
android - Android: allowTaskReparenting="true" を機能させる方法
ACTION_VIEWまたはACTION_EDITでインテントを受け取ることで別のアプリから起動できるアプリを書いています。たとえば、電子メールの添付ファイルを表示して開くことができます。問題は、ホーム ボタンをクリックして、使用していたメール アプリの起動アイコンをもう一度クリックすると、アクティビティが強制終了され、ユーザーが行った編集が失われることです。私がしたいことは、ユーザーがホームボタンをクリックすると、アクティビティが再親化され、ユーザーがアプリの起動アイコンをクリックしたときに再開されるようにすることです。manifest.xml で android:allowTaskReparenting="true" を設定しようとしましたが、これは機能しません。まったく効果がない場合もあれば、アクティビティが起動アイコンに移動しても、メール アプリのアイコンをもう一度クリックすると強制終了される場合があります。allowTaskReparenting に関するドキュメントは非常に曖昧です。プロパティの意味は次のとおりです。
「アクティビティが、それを開始したタスクからアフィニティを持つタスクに移動 できるかどうか。」</p>
ここでできるという言葉はどういう意味ですか?私が欲しいのは、アクティビティが移動する (そしてそこにとどまる) という保証です。これを達成する方法はありますか?
助けていただける方、よろしくお願いします。
編集
以下のコメントに応えて、私が直面している問題を示す赤ちゃんバージョンをまとめました。別のアプリでファイル (電子メールの添付ファイルなど) をクリックして EditFileActivity を開始すると、そのファイルを編集できます。ただし、ホーム アイコンをクリックしてからメール アプリ アイコンをもう一度クリックすると、ファイルに加えた変更が失われます。ユーザーが明示的にクリックして「はい」または「いいえ」と言った場合にのみ、Android システムに EditFileActivity のインスタンスを忘れさせたいと思います。理想的には、EditFileActivity のすべてのインスタンスをアプリの起動アイコンに積み上げたいと考えています。singleTask または singleInstance を使用して、開いているすべてのファイルをタブに表示する何らかのアクティビティを作成することで、これに似たものを実装できますが、Android システム自体に助けてもらうことができれば、はるかに簡単になります。
これは、問題を示す完全なプロジェクトです。
起動アクティビティ:
編集ファイル アクティビティ:
2014 年 10 月 12 日更新
発生した問題は、インテント フラグ FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET の使用が原因でした。幸いなことに、API レベル 21 の時点で、Google はこのフラグを廃止しました。
android - Android のタスクを理解しようとする
私はアンドロイドのタスクを理解しようとしています。起動アイコンからアクティビティ X を開始し、そのアクティビティから別のアプリケーションから新しいアクティビティ Y を開始するとします。アクティビティ X と Y で構成されるタスクがあります。ここで、ホーム ボタンを押して、X の起動アイコンをもう一度クリックしたとします。Androidのドキュメントによると、デフォルトでは、システムは以前と同じようにYを上にしてタスクを表示する必要があります。
ただし、実際のデバイスで少し実験すると、これは多くの場合に起こることではないことがわかります。X がメール アプリで、メールのコンテンツを別のアプリケーション Y で表示するとします (たとえば、ギャラリーで写真を開く、Quickoffice で PDF ドキュメントを開く、Chrome で Web ページを開くなど)。ホーム、次に X の起動アイコンを押すと、実際には X が再び表示されます。コンテンツを表示しているアクティビティが別の起動アイコンに移動されることもありますが、多くの場合、Android システムによって完全に忘れられています。
これは、X が GMail、Yahoo Mail、または Google Drive の場合に起こることです。
私の質問は、Y がタスクから放り出される原因は何ですか? それはXがすることですか、それともYがすることですか? それが X のすることである場合、Y の開発者としてそれを防ぎ、あなたの活動が Android システムによって忘れられるのを防ぐためにできることはありますか? ありがとう
android - アプリケーションの起動アイコンをクリックするとどうなりますか?
アプリの起動アイコンをクリックするとどうなりますか?
新しいインテントは常に送信されますか?それとも、最近のタスクからタスクを再開した場合と結果が同じになることがありますか?
インテントが送信された場合、それはいつ新しいアクティビティ インスタンスの onCreate() メソッドに送信され、いつ既存のアクティビティの onNewIntent() を介してルーティングされますか?
タスク内の既存のアクティビティの onNewIntent() を介してインテントがルーティングされるとします。どのアクティビティに送信されますか? 頂点に最も近いものか、根に最も近いものか? 常にアプリケーションの起動アクティビティのインスタンスに送信されますか?それとも、ルートと同じアフィニティを持つアクティビティに送信されることがありますか? ルートと同じアフィニティを共有しないアクティビティに送信されることはありますか?
最後に、これはタスク内のアクティビティのさまざまな起動モード (標準、シングル トップ、シングル インスタンス、シングル タスク) によってどのように影響を受けるのでしょうか?
ここまでわかる人がいましたら、助けてください!
android - Android: ホームを押した後にアプリを再開すると、アプリは常にルート アクティビティで起動します
ゲームの私の使用例は次のようになります: 私は LoadingActivity を持っています。これは (AsyncTask によって読み込まれますが、これは問題ではありません)、ゲームに必要なすべてのグラフィックを静的クラスに格納します。ロードが完了すると、MenuActivity が表示されます。このアクティビティから、LikeBeginActivity などの他のアクティビティを起動できます。
これはマニフェストのスニペットです:
呼び出しは次のようになります。
読み込み中のアクティビティ
メニューアクティビティ
厄介な問題は、LevelbeginActivity で HOME を押してランチャーでゲームを再開すると、常に LoadingActivity から開始されるのに、タスク全体がクリアされるのはなぜですか? それは私には意味がありません。それから私は追加することを考えました
マニフェストの LoadingActivity に追加しますが、これも役に立ちません。タスク全体が再び開始されるのはなぜですか? LoadingActivity が何度も開始されるとメモリが不足するため、これは非常に問題です。(次の問題は戻るボタンの動作ですが、それは別の問題です)。最後のアクティビティ名を SharedPreferences などとして保存することで、見苦しい読み込み動作をいじることができますが、これよりもきれいな解決策をお勧めします。
android - Android が TimerTask extends クラスにパラメーターを渡す
私のアプリケーションでは、パラメーターを TimerTask に渡して使用する必要がありますContext
。しかし、私はそれを行うことはできません。この以下のコードGetSMSThread
クラスではsubclass
、メインクラスからパラメーターを取得する必要があります。
GetSMSThread
サブクラス: