相关疑难解决方法(0)

Android - 为什么使用onSaveInsanceState()来保存未被调用的位图对象?

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

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

我读到如果方向改变,那么活动将被销毁并再次重新创建(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()");
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

编辑:

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

android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)

现在 …

android bitmap savestate

6
推荐指数
2
解决办法
8917
查看次数

标签 统计

android ×1

bitmap ×1

savestate ×1