我有一个复杂的 Android 应用程序,其中有大量应用程序状态需要保留(以特定格式)。写出数据不是瞬时操作,因此最好尽量减少不必要的持久化。
由于持久性开销,每次更改时都持久化状态是不切实际的。理想情况下,当用户点击“主页”按钮或点击应用程序根 Activity 上的“后退”按钮(或来电等)使应用程序“后台运行”时,将触发持久状态。这最大限度地减少了持久性开销,同时从用户的角度维护了状态的一致性。问题是您如何检测应用程序是否处于“后台”状态?
Activity 生命周期调用(onStart、onResume、onPause 和 friend )没有帮助,因为该应用程序有许多不同的 Activity ,当用户点击“主页”时,其中任何一个都可能处于 Activity 状态。此外,当 Activity 在 Activity 堆栈上被推送、弹出(和底部终止)时调用会被调用,因此它们不会反射(reflect)应用程序是否正在消失。
那么应用如何检测它何时进入后台?
最佳答案
如果你想在你的任何 Activity 进入后台时保持某种状态,你总是可以扩展 Activity ,添加你在 onPause 和 onResume 中调用的两个抽象方法。然后,您的每一个扩展这个新抽象类的 Activity 都将被迫定义 saveState() 和 loadState()。这些方法可以定义为每个 Activity 保存和加载的内容。
这只是一个使用继承来强制您的程序员实现其他方法和技术方法的示例。您可以告诉您的程序员,如果您需要保存 Activity 的状态,只需扩展此类 Activity ,然后 IDE 就会将它们放在您的设计路径上。
package com.yourcompany.yourpackage;
import android.app.Activity;
public abstract class ActivitySaveState extends Activity{
@Override
protected void onPause() {
super.onPause();
saveState();
}
@Override
protected void onResume() {
super.onResume();
loadState();
}
public abstract void loadState();
public abstract void saveState();
}
您还可以在父类(super class)中为它们实例化一些状态保存机制(即 Web 服务端点、DAO 或可能带有您的持久性单元。
@Override
protected void onResume() {
super.onResume();
saveState();
CustomDataAccessObject dao = new CustomDataAccessObject("Activity3");
loadState(dao );
}
public abstract void loadState(CustomDataAccessObject dao);
关于Android:转到 "background"时保存应用程序状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765389/