말씀하신 경우는 하나의 기능을 여러 단계에 거쳐 처리하는 workflow에 해당합니다. 이런 경우는 각 단계를 그룹화시키는 것이 이체에도 맞고 구현하는데도 좀 더 적합할 듯합니다. 여기서 핵심 포인트 중의 하나는 각 단계에서 입력한 데이터를 한 곳에서 가지고 있다고 저장을 해야 하기 때문에, 이 부분을 잘 설계하시는게 중요해 보입니다.
먼저, 액티비티 3개를 사용한다면 (편의상 Activity1, Activity2, Activity3, Activity4으로 하죠), Activity1에서 Activity2를 startActivityForResult를 이용해서 Activity2에서 입력한 정보를 전달받고 같은 방법으로 Activity1에서 Activity3를 띄워 필요한 정보를 입력받으면 될 것 같습니다. Activity1이 Activity2와 Activity3에서 입력한 정보를 모두 보관해야 겠죠. Activity4도 마찬가지로 처리합니다. Activity1에서는 입력한 데이터를 리사클러뷰를 통해 보여주면 될 것 같습니다.
Activity1 -> Activity2 -> Activity1 -> Activity3 -> Activity1 -> Activity4
아니면 Activity2 -> Activity3 -> Activity4 -> Activity1 순서로, Activity2에서 입력한 데이터를 intent를 통해 Activity3로, Activity2, 3에서 입력한 데이터를 Activity4로 Activity2, 3, 4에서 입력한 데이터를 Activity1으로 전달해 입력결과를 보여줄 수도 있는데 많이 복잡해지므로 별로 권장하고 싶지는 않습니다.
개인적으로는 액티비티를 사용하는 것보다는 하나의 흐름이므로 Activity + Fragment1 + Fragment2 + Fragment3 + Fragment4 가 좀 더 적합한 방법으로 보여집니다. 액티비티와 프레그먼트 간에 차이가 있긴 하지만 유저의 입력흐름으로 볼 때는 액티비티를 사용하는 것과 동일합니다. Fragment는 Activity안에서만 존재하며, Activity보다 가볍기도 하고 앞뒤의 이동에 대해 좀 더 유연한 처리가 가능합니다. ViewPager를 사용할 수도 있고 아니면 FragmentManager를 통해 Fragment를 단계에 맞게 replace해서 처리하면 될 것 같습니다. ViewModel를 사용한다면 구현이 좀 더 깔끔해 질 것 같은데, 그렇지 않더라도 앞에서 처럼 Activity에 Fragment에서 입력한 데이터를 보관하는 형태로 처리를 하면 될 것 같습니다.
첫번째 방법으로 하실 거면 startActivityrForResult와 setResult를 사용하시거나
https://developer.android.com/training/basics/intents/result 를 참조하셔서 다른 액티비티에서 결과값을 받는 방법을 공부하셔야 합니다.
두번째 방법은 Fragment 사용방법을 익히셔야 합니다. ResultAPI란 걸 찾아보시면 두번째 방법에 유용하게 써먹을 수 있습니다.
https://developer.android.com/guide/fragments/communicate#fragment-result
Fragment를 사용하실거라면 Navigation Component와 같이 사용해서 Single Activity 앱을 만드시면 앱이 좀 더 빨라질 수 있고 Navigation 처리가 간단하게 될 수 있습니다.