Android - 为什么使用 onSaveInstanceState() 保存位图对象没有被调用?

2024-04-04

我正在制作一个简单的绘图应用程序。

我希望能够在设备方向改变时保存用户在屏幕上的绘图。这仅发生在主要活动中。

我读到,如果方向发生变化,则活动将被销毁并再次重新创建(onCreate(Bundle created)被调用)。 我不确定这是否意味着它也应该调用onSavedInstanceState(Bundle bundle),因为在我的应用程序中,只有当另一个活动将焦点放在我的主要活动之上时才会调用它,但在旋转到横向/纵向时不会调用它。

我只是在寻找一种方法来保存现有位图并在方向更改时将其传递给主要活动。如果我的onSaveInstanceState从来没有被叫过?

另外,由于 Bitmap 实现了parceable我已经用过它了。

这是主要活动的代码:

 public void onCreate(Bundle savedInstanceState) {      
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
// some more activity code...

        if (savedInstanceState != null) {
        bitmap = savedInstanceState.getParcelable("bitmap");
        Log.d("STATE-RESTORE", "bitmap created");
        paintBoard.setBitmapBackground(bitmap, false);
        Log.d("RESTORING...", "onRestoreInstanceState()");
    } else {
        Log.d("SavedInstanceState", "null");
    }
}


// Never called when I change orientation on my device
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    bitmap = Bitmap.createBitmap(paintBoard.getBitmap());
    outState.putParcelable("bitmap", bitmap);
    Log.d("STATE-SAVE", "onSaveInstanceState()");
}

任何帮助将不胜感激。

EDIT :

我从 AndroidManifest.xml 文件中删除了这一行:

android:configChanges="orientation"

and now onSaveInstanceState()当我改变设备方向时,确实会被调用。


你应该阅读本文 http://developer.android.com/guide/topics/resources/runtime-changes.html完全地。

...您可能无法完全恢复您的 系统为您保存的 Bundle 的活动状态onSaveInstanceState()回调——它不是设计来携带大的 对象(例如位图)及其中的数据必须序列化 然后反序列化,这会消耗大量内存并使得 配置更改缓慢。在这种情况下,您可以缓解 通过保留有状态对象来重新初始化您的活动的负担 当您的 Activity 由于配置更改而重新启动时。

要在运行时配置更改期间保留对象:

  1. 覆盖onRetainNonConfigurationInstance()方法返回 您想要保留的对象。
  2. 当您的活动再次创建时, 称呼getLastNonConfigurationInstance()恢复你的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 为什么使用 onSaveInstanceState() 保存位图对象没有被调用? 的相关文章

随机推荐