前言
在Android 开发中,我们会经常遇到Activity或者fragment等组件被系统回收的问题,我们就要处理这种情况,以便于我们可以保存用户的数据,然后,恢复它
问题
要想看到系统回收的现象,必然不是很容易看到的,因为,系统只有在系统资源不足的情况下,才会回收非前台的资源
解决办法
手动制造系统回收,才会让开发者快速处理系统回收这之类的问题,废话不多说,打开开发者选项,如下图,找到“不保留活动”(Don't keep activities)的这个选项,然后打开它,
这个时候,写一个简单的测试代码,你可以直接按home键回到桌面,就可以手动造一个activity被系统回收的现象了
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
//这里不能保证savedInstanceState一定不为空,所以你要判断一下它,再使用
Log.d(TAG, "onCreate:savedInstanceState is not null");
}
setContentView(R.layout.activity_main);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//activity被回收的时候,会调用该函数,你可以在这里面保存数据(极限情况下,可能不会调用)
Log.d(TAG, "onSaveInstanceState");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//当activity被回收后,需要恢复上次的数据的时候就需要调用它
//这里的savedInstanceState一定不会为空,所以可以直接使用
Log.d(TAG, "onRestoreInstanceState");
}
}