Keep scene after Activity restart

This commit is contained in:
seven332 committed 2015-06-15 22:42:55 +08:00
1 parent 588b255788
commit 5a2a5b4289
8 files changed
+75 -161

No files matched your search

@@ -24,9 +24,7 @@ import com.hippo.util.IntIdGenerator;
import com.hippo.util.Log;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
public class SceneManager {
@@ -42,8 +40,6 @@ public class SceneManager {
private List<SceneStateListener> mSceneStateListenerList = new ArrayList<>();
private Map<String, Object> mTransferStop = new HashMap<>();
private static SceneManager sSceneManger;
public static SceneManager getInstance() {
@@ -105,6 +101,12 @@ public class SceneManager {
}
}
private void notifyRebirth(Class clazz) {
for (SceneStateListener l : mSceneStateListenerList) {
l.onRebirth(clazz);
}
}
Scene createSceneByClass(@NonNull Class sceneClass) {
try {
return (Scene) sceneClass.newInstance();
@@ -209,7 +211,7 @@ public class SceneManager {
// It is the last scene, just finish the activity
mSceneStack.remove(index);
scene.destroy(false);
scene.destroy();
scene.setState(Scene.SCENE_STATE_DESTROY);
notifyDestroy(scene.getClass());
@@ -228,7 +230,7 @@ public class SceneManager {
notifyResume(previousState.getClass());
}
scene.destroy(false);
scene.destroy();
scene.setState(Scene.SCENE_STATE_DESTROY);
notifyDestroy(scene.getClass());
@@ -293,32 +295,12 @@ public class SceneManager {
}
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
Stack<Scene> tempStack = new Stack<>();
tempStack.addAll(mSceneStack);
mSceneStack.clear();
Map<String, Object> transferStop = mTransferStop;
for (Scene oldScene : tempStack) {
oldScene.destroy(true);
oldScene.setState(Scene.SCENE_STATE_DESTROY);
notifyDestroy(oldScene.getClass());
oldScene.save(transferStop);
Scene newScene = createSceneByClass(oldScene.getClass());
newScene.restore(transferStop);
newScene.create(savedInstanceState);
newScene.setState(Scene.SCENE_STATE_CREATE);
notifyCreate(newScene.getClass());
newScene.restoreInstanceState(savedInstanceState);
newScene.setState(Scene.SCENE_STATE_RUN);
mSceneStack.push(newScene);
transferStop.clear();
for (Scene scene : mSceneStack) {
// Recreate
scene.rebirth(savedInstanceState);
notifyRebirth(scene.getClass());
scene.create(savedInstanceState);
scene.restoreInstanceState(savedInstanceState);
}
}
@@ -327,5 +309,6 @@ public class SceneManager {
void onDestroy(Class clazz);
void onPause(Class clazz);
void onResume(Class clazz);
void onRebirth(Class clazz);
}
}