我有2项活动。主要活动A&活动B. 我不希望活动A破坏。我正在开始一项新任务中的活动B.
public static void startActivity(Class<?> startClass) {
Intent intent = new Intent(Constants.getActivity(), startClass);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Constants.getActivity().startActivity(intent);
}`
他们创造/破坏活动并且他们泄漏。我做错了吗?如何从活动“A”开始活动“B”,反之亦然,当我不需要时,将它们保存在后台。
答案 0 :(得分:0)
使用任务时,清理非常重要。您需要清理活动中的所有任务。 readthis
如果活动没有很多疯狂的初始化,只需使用finish和onCreates。否则请注意,当您在活动之间切换时,将经常调用onResume。清理在这里至关重要。如果你不清理,它可能的一个活动(使用其他清理活动的死对象引用)可能会从活动堆栈返回并抛出异常。很难调试这种例外。
答案 1 :(得分:0)
首先,你想做什么?您应该始终从UI中分离要在后台执行的操作。可以想象您的活动只是一个显示UI的容器,其他所有内容都可以从持久存储或已保存的实例包中存储和恢复。
了解Activity生命周期与服务生命周期之间的区别非常重要。
我将在这里提到另一个问题的回答:
Your app will be in the background, onResume and onPause will both be called,前提是操作系统有足够的内存来保留新应用和所有旧应用。
如果您在用户不看时需要长时间运行,请使用服务。
如果您需要用户以相同的状态返回应用,you need to do the work in onResume and onPause to save the state information and initialize your UI again当用户回来时。如果你真的担心它会被杀死(好吧,它不应该丢失我认为的捆绑包),你可以将它们存储在你的应用程序的SharePreferences中。
如果您想知道应用何时从该特定分享意图返回,请使用startActivityForResult
答案 2 :(得分:0)
如你所说,你不能让活动“活着”。当某项活动暂停时,Android系统始终可以随时声明其内存并将其卸载。
但是如果你想从A切换到B,那么A和B可能是单个活动中的不同视图。也许你想看看http://developer.android.com/reference/android/widget/ViewFlipper.html