Android 在修剪内存时保存数据

示例

public class ExampleActivity extends Activity {
    
    private final static String EXAMPLE_ARG = "example_arg";
    private int mArg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);
        
        if(savedInstanceState != null) {
            mArg = savedInstanceState.getInt(EXAMPLE_ARG);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(EXAMPLE_ARG, mArg);
    }
}

说明

那么,这里发生了什么?

Android系统将始终努力清除尽可能多的内存。因此,如果您的活动降到了后台,而另一个前台活动要求分享,那么Android系统会调用onTrimMemory()您的活动。

但这并不意味着您所有的财产都应消失。您应该做的就是将它们保存到Bundle对象中。捆绑对象在内存方面要好得多。在包中,每个对象都由唯一的文本序列标识-在上面的示例中,整数值变量mArg以引用名称保存EXAMPLE_ARG。并且当重新创建活动时,请从Bundle对象中提取旧值,而不是从头开始创建它们。