Android 屏幕旋转会导致对SQLite的频繁调用出现问题

Android 屏幕旋转会导致对SQLite的频繁调用出现问题,android,sqlite,rotation,restore,Android,Sqlite,Rotation,Restore,如果您是一名经验丰富的Android程序员,您可能知道屏幕方向会导致应用程序通过onSaveInstanceState()和onRestoreInstanceState保存和还原 您可能还知道,通过这些功能恢复对象并不容易,例如,如果我按以下方式创建数据库连接: SQLiteDatabase mydb = openOrCreateDatabase(dbn.trim().toLowerCase(), 0, null); Cursor rs = mydb.rawQuery("SELECT * FR

如果您是一名经验丰富的Android程序员,您可能知道屏幕方向会导致应用程序通过onSaveInstanceState()和onRestoreInstanceState保存和还原

您可能还知道,通过这些功能恢复对象并不容易,例如,如果我按以下方式创建数据库连接:

SQLiteDatabase mydb = openOrCreateDatabase(dbn.trim().toLowerCase(), 0, null);
Cursor rs = mydb.rawQuery("SELECT * FROM MY_TABLE where id>0", null);
然后我执行一个用于加载记录的查询,如下所示:

SQLiteDatabase mydb = openOrCreateDatabase(dbn.trim().toLowerCase(), 0, null);
Cursor rs = mydb.rawQuery("SELECT * FROM MY_TABLE where id>0", null);
之后,我可以使用以下命令读取下一条匹配记录:

rs.moveToNext();
现在有个半坏消息。。。如果像我刚才解释的那样,在对SQLite的一次连续调用中,用户倾斜设备,所有内容都会被删除然后恢复,除了包含结果集的光标之类的对象。因此,即使SQLite连接也会被重置

现在,我知道人们可以在这些任务中锁定屏幕方向,无论是通过编程还是通过Android清单。所以,没问题

现在,坏消息是。。。使用startActivityForResult()调用意图时,无法控制所调用功能的屏幕方向!因此,即使您专门将应用程序配置为锁定方向,主机应用程序也会旋转。而且似乎没有一个直观的解决方法

这会导致一系列问题,从空指针到各种崩溃


我无法控制用户何时完成secutional SQLite调用,或者用户何时调用startActivityForResult(),有没有办法避免这一切?我在想,是否有一种方法可以通过编程方式锁定整个设备的屏幕旋转…

您可以覆盖配置更改,以便在屏幕旋转期间应用程序不会关闭。在您的清单部分,输入

android:configChanges="orientation|screenSize" >
当方向或屏幕大小更改而不是重新启动时,这将在应用程序中调用Activity.OnConfiguration Changed()

在我的应用程序中,我所做的就是这样(技术上不需要):

我不需要添加任何代码来刷新视图-它们会自动失效并重新生成

有关详细信息,请参阅

当检测到屏幕旋转时,是否不能保存位置,然后使用光标。移动位置(索引)?因为索引是整数,所以可以保存光标的位置。但是我不能保存游标本身,因为它不是一个可序列化的对象。数据库连接本身也是如此。我可以简单地重新打开数据库,但是对于游标,我需要重新发出查询,这可能会占用大量资源。啊,对了,我还以为你要重新打开数据库呢。那为什么不使用一个新的工具呢?它可以保存光标。最简单的方法是通过在相关活动上设置configChanges变量来关闭清单中的活动重新启动行为。这从一开始就是谷歌的死脑筋行为。嘿,Gabe,谢谢你的建议,我50分钟前就尝试过了,但应用程序资源无法编译,可能我使用的是一个被盗用的API版本。我将使用API 22.0重试。它起作用了。我仍然认为以这种方式重新启动应用程序是一种愚蠢的行为。操作系统应该能够自动完成这项工作,而不必采用这种丑陋的方式。谢谢(佩里)