Android屏幕方向变化时的内存泄露通常是由于配置更改(如屏幕旋转)导致的Activity重新创建,但旧的Activity实例仍然被保留在内存中,从而导致内存泄露。以下是解决方法之一的代码示例:
android:configChanges="orientation|screenSize"
,以便在屏幕方向变化时阻止Activity重新创建。
onConfigurationChanged()
方法,并在方法中处理屏幕方向变化的逻辑。public class YourActivity extends AppCompatActivity {
...
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 处理屏幕方向变化的逻辑
// 例如更新UI布局、重新加载数据等
}
...
}
onRetainNonConfigurationInstance()
和getLastNonConfigurationInstance()
方法来保存和恢复数据对象,以避免重新创建Activity时丢失数据。public class YourActivity extends AppCompatActivity {
private YourDataClass data;
@Override
public Object onRetainNonConfigurationInstance() {
return data;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
data = (YourDataClass) getLastNonConfigurationInstance();
// 恢复数据对象的状态
if (data != null) {
// 例如恢复UI状态、恢复数据等
} else {
// 初始化数据对象
data = new YourDataClass();
}
// 设置布局和其他初始化操作
setContentView(R.layout.activity_your);
...
}
...
}
通过上述方法,可以防止由于屏幕方向变化引起的Activity的重新创建,从而避免了内存泄露的问题。请注意,这只是解决内存泄露问题的一种方法,根据具体情况可能会有其他解决方案。