First, you need to determine what is actually the "state" in your app. You haven't said what you are actually doing, but let me assume that the ArrayList of objects is the state the user is working with.
Second, decide what the lifecycle of this state actually is. Is it really tied to that activity? Or should the user not lose it if say their battery runs low, the device turns off, and they later return to your app? If the former, onSaveInstanceState() is correct; if the latter, you'll want to save to persistent storage in onPause().
For onSaveInstanceState() with custom objects, the key is to implement the Parcelable interface. This involves implementing the methods on Parcelable, as well as making a static CREATOR object in your class. Here's the code for a typical simple Parcelable class:
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/content/ComponentName.java
The key functions are the Parcelable implementation:
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/content/ComponentName.java;h=7ca0f01b986924d939b57061966ec8526de9e608;hb=HEAD#l214
and the CREATOR static class:
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/content/ComponentName.java;h=7ca0f01b986924d939b57061966ec8526de9e608;hb=HEAD#l256
(The static writeToParcel() and readFromParcel() are just conveniences that were done for that class and not required.)
Now that you have that, you can put your entire ArrayList of objects into the saved state Bundle with Bundle.putParcelableArrayList:
http://developer.android.com/reference/android/os/Bundle.html#putParcelableArrayList(java.lang.String, java.util.ArrayList)
In Activity.onCreate(), check to see if you have a savedState Bundle, and if so try to retrieve the ArrayList from that and use it if found, creating a new adapter and list view for the new activity that are used to display it.