web-dev-qa-db-ja.com

Androidアプリケーションでバックスタックアクティビティを見つける方法は?

アクティビティバックスタックA-> B-> C-> D-> Eを持つアプリケーションがあります。アクティビティEで、ナビゲートしたバックスタックアクティビティを知りたいです。どうすればこれを見つけることができますか?

20
azzits

以下のコードを使用して、バックスタック内のすべてのタスクと各タスク内の上位のアクティビティを抽出できます

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();
}
5
Rajdeep Dua

"adb Shell dumpsysアクティビティアクティビティ"コマンドを使用できます

参考までにhttp://www.onsandroid.com/2015/01/find-back-stack-activities-in-Android.html

5
suresh

RegisterActivityLifecycleCallbacksのこのAPIを介して、アクティビティの変更を聞くことでそれを行うことができると思います。

https://developer.Android.com/reference/Android/app/Application.html#registerActivityLifecycleCallbacks(Android.app.Application.ActivityLifecycleCallbacks)

https://developer.Android.com/reference/Android/app/Application.ActivityLifecycleCallbacks.html

これは、独自のクラスのスタックに追加し、必要に応じて完全な状態を確認するのに役立ちます。

1

StartActivityの代わりにstartActivityForResultを使用してから、オリジン/ソースアクティビティを取得することをお勧めします-getCallingActivity()。getClassName()を呼び出します。

Aはそれが家から来たことをどうやって知るのでしょうか? getIntent()とそのgetAction()-> Android.intent.action.MAINおよびgetCategories()-> Android.intent.category.LAUNCHERを使用します

0
Karan Bhandari

うまくいくかわかりません...前のアクティビティに戻りたいですか?その場合は、前のアクティビティに戻る現在のアクティビティを終了します。

0
Quentin DOMMERC

getRunningTasks(..)が廃止されたため、またはアプリに特別な権限を追加したくない場合は、すべてのアクティビティが自分のものである場合の代替ソリューションがあります。識別子をマークできます(アクティビティ自体ではなく、ガベージコレクションする必要があります)シングルトンStackLinkedListまたはLinkedHashSetonPause()で識別子をスタックに追加し、onResume()

そのスタックの内容をチェックして、アクティビティがあるかどうか、およびそれらが作成されたシーケンスを知ることができます。

すべてのアクティビティがアプリの共通の基本アクティビティから派生している場合は、コードをクリーンアップして手動でクリーンアップするのを忘れることができます。

0
Gianluca P.

実際には、getRunningTasksを使用してrunningtaskinfoからタスクIDを取得し、次にタスクIDを比較してgetRecentTasksを使用してrecenttaskinfoを取得できます。これで、recenttaskinfoのbaseintentを使用して、startactivityを使用してそのアクティビティを再開できます。

0
Mikonos