アクティビティバックスタックA-> B-> C-> D-> Eを持つアプリケーションがあります。アクティビティEで、ナビゲートしたバックスタックアクティビティを知りたいです。どうすればこれを見つけることができますか?
以下のコードを使用して、バックスタック内のすべてのタスクと各タスク内の上位のアクティビティを抽出できます
ActivityManager m = (ActivityManager) ctx.getSystemService( ctx.ACTIVITY_SERVICE );
List<RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next();
int id = runningTaskInfo.id;
CharSequence desc= runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity.getShortClassName();
}
"adb Shell dumpsysアクティビティアクティビティ"コマンドを使用できます
参考までにhttp://www.onsandroid.com/2015/01/find-back-stack-activities-in-Android.html
RegisterActivityLifecycleCallbacksのこのAPIを介して、アクティビティの変更を聞くことでそれを行うことができると思います。
https://developer.Android.com/reference/Android/app/Application.ActivityLifecycleCallbacks.html
これは、独自のクラスのスタックに追加し、必要に応じて完全な状態を確認するのに役立ちます。
StartActivityの代わりにstartActivityForResultを使用してから、オリジン/ソースアクティビティを取得することをお勧めします-getCallingActivity()。getClassName()を呼び出します。
Aはそれが家から来たことをどうやって知るのでしょうか? getIntent()とそのgetAction()-> Android.intent.action.MAINおよびgetCategories()-> Android.intent.category.LAUNCHERを使用します
うまくいくかわかりません...前のアクティビティに戻りたいですか?その場合は、前のアクティビティに戻る現在のアクティビティを終了します。
getRunningTasks(..)
が廃止されたため、またはアプリに特別な権限を追加したくない場合は、すべてのアクティビティが自分のものである場合の代替ソリューションがあります。識別子をマークできます(アクティビティ自体ではなく、ガベージコレクションする必要があります)シングルトンStack
、LinkedList
またはLinkedHashSet
:onPause()
で識別子をスタックに追加し、onResume()
。
そのスタックの内容をチェックして、アクティビティがあるかどうか、およびそれらが作成されたシーケンスを知ることができます。
すべてのアクティビティがアプリの共通の基本アクティビティから派生している場合は、コードをクリーンアップして手動でクリーンアップするのを忘れることができます。
実際には、getRunningTasksを使用してrunningtaskinfoからタスクIDを取得し、次にタスクIDを比較してgetRecentTasksを使用してrecenttaskinfoを取得できます。これで、recenttaskinfoのbaseintentを使用して、startactivityを使用してそのアクティビティを再開できます。